如何在 Identity Server 3 中使用 Windows 身份验证?
How do I use Windows auth with Identity Server 3?
我的目标是一个使用 Web 服务的 Angular 应用程序,app/web 服务的用户使用 Windows auth 进行身份验证。用户应该能够登录到我们 Windows 域上的计算机,打开浏览器并使用 Angular 应用程序而无需再次登录。
研究
我从 https://github.com/IdentityServer/IdentityServer3.Samples/
下载了所有源代码示例
我完成了 Simplest OAuth2 Walkthrough 示例。没问题。
然后我打开了 Web 主机(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
指向正确的位置。请有人可以解释这个过程,或者给我一个工作客户的例子吗?预先感谢您的帮助:)
编辑
我一直在做一些进一步的研究。我检查了身份服务器的日志,以确保 Adding WS-Federation endpoint 操作在配置期间完成。确实如此。
然后我创建了一个简单的控制台应用程序来调用 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
所以我不再前进了。
为什么要使用令牌端点 - 只需执行 OAuth/OpenID 连接隐式流。这将使用 Windows 身份验证自动对用户进行身份验证。
我的目标是一个使用 Web 服务的 Angular 应用程序,app/web 服务的用户使用 Windows auth 进行身份验证。用户应该能够登录到我们 Windows 域上的计算机,打开浏览器并使用 Angular 应用程序而无需再次登录。
研究
我从 https://github.com/IdentityServer/IdentityServer3.Samples/
下载了所有源代码示例我完成了 Simplest OAuth2 Walkthrough 示例。没问题。
然后我打开了 Web 主机(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
指向正确的位置。请有人可以解释这个过程,或者给我一个工作客户的例子吗?预先感谢您的帮助:)
编辑
我一直在做一些进一步的研究。我检查了身份服务器的日志,以确保 Adding WS-Federation endpoint 操作在配置期间完成。确实如此。
然后我创建了一个简单的控制台应用程序来调用 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
所以我不再前进了。
为什么要使用令牌端点 - 只需执行 OAuth/OpenID 连接隐式流。这将使用 Windows 身份验证自动对用户进行身份验证。