【问题标题】:How do I use Windows auth with Identity Server 3?如何在 Identity Server 3 中使用 Windows 身份验证?
【发布时间】:2016-04-29 20:14:23
【问题描述】:

我的目标是使用 Web 服务的 Angular 应用程序,应用程序/Web 服务的用户使用 Windows auth 进行身份验证。用户应该能够登录到我们 Windows 域上的机器,打开浏览器并使用 Angular 应用程序,而无需再次登录。

研究

我从https://github.com/IdentityServer/IdentityServer3.Samples/下载了所有的源代码示例

我完成了最简单的 OAuth2 演练示例。没问题。

然后我打开了 Web Host (Windows Auth All-In-One) 示例。在注释掉导致问题的两行代码后,我可以恢复并构建项目(Clients.cs 第 313,359 行,设置“AllowAccessTokensViaBrowser=false”。可能不相关。

当应用程序运行时,我可以在 localhost:44333 上看到 IdentityServer3 登录页面。太好了。

我还可以在 localhost:44333/windows 上看到 Windows 身份验证服务元数据(一个 SAML 文档)。也很好。

问题是,我不知道下一步该做什么。该文档似乎建议下一步涉及编写一个调用 Windows 身份验证服务以获取令牌的客户端:

http://github.com/IdentityServer/IdentityServer3/issues/1463

这是正确的方法吗?我无法使代码示例工作。我什至不确定我能否将OAuth2Client 指向正确的位置。请有人可以解释这个过程,或者给我一个工作客户的例子吗?提前感谢您的帮助:)

编辑

我一直在做一些进一步的研究。我检查了身份服务器的日志以确保添加 WS-Federation 端点 操作在配置期间完成。确实如此。

然后我创建了一个简单的控制台应用程序来调用 Windows 身份验证服务,如下所示:github.com/IdentityServer/IdentityServer3/issues/2318

导入 Thinktecture.IdentityModel.Client 后,我修改了该页面上的代码以适合我的端口号等,我最终得到了这个:

   var handler = new HttpClientHandler
   {
       UseDefaultCredentials = true
   };
   var oauthClient = new OAuth2Client(
                    new Uri("https://localhost:44333/windows/token"),
                    handler);

   var result = oauthClient.RequestCustomGrantAsync("windows").Result;

我的结果对象仍然有一个 NotFound 的 HttpErrorStatusCode,这让我很难过。

另一个编辑

按照 Branimir 下面的建议,我尝试将客户端指向身份服务器端点。所以我的代码现在是:

var oauthClient = new OAuth2Client(
   new Uri("https://localhost:44333/connect/token"),
   handler);

这也不起作用。这是身份服务器日志所说的:

Start token request
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Validation.SecretParser)
 Parser found no secret
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Validation.ClientSecretValidator)
 No client secret found
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Endpoints.TokenEndpointController)
 End token request
iisexpress.exe Information: 0 : 04/27/2016 20:35:23 +01:00 [Information] (IdentityServer3.Core.Results.TokenErrorResult)
 Returning error: invalid_client

所以我没有进一步前进。

【问题讨论】:

  • 您检查了网址吗?我下载了相同的代码,看起来端点是localhost:44333/connect/token,但我仍然不知道如何使用它。
  • 谢谢 Branimir,我刚刚尝试使用该 URL,但它对我不起作用,我已经编辑了我的问题以提及这一点。如果你有任何进展,请告诉我。

标签: authentication thinktecture-ident-server identityserver3 thinktecture-ident-model


【解决方案1】:

您为什么要使用令牌端点 - 只需执行 OAuth/OpenID Connect 隐式流程。这将使用 Windows 身份验证自动对用户进行身份验证。

【讨论】:

  • 感谢您的回答。我是这个领域的新手,所以我很感激你的帮助。如果您知道任何好的 Windows Auth + Identity Server 教程,我将不胜感激。
  • 经过一些实验,我设法找到了使用隐式流的解决方案。我已经在 github 上发布了我的解决方案,并附有演练 (github.com/mark-truran/ID3WINDOWSAUTH)
  • 我对答案投了反对票,因为这基本上是一句尖刻的话。但是,它显然将原始海报引导到了正确的答案,他慷慨地给了我们一个链接,以便我们弄清楚这一点。谢谢你,马克。
猜你喜欢
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 2017-06-26
  • 2019-03-26
  • 2018-12-30
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多