我有一个配置了ADFS vNext的Windows Server 2016 TechnicalPreview 3,作为第一个客户端我创建了一个MVC应用程序作为ReplingPartyTrust . 使用ADFS进行身份验证对MVC应用程序非常有效 . 现在问题:我编写了一个本机应用程序(WPF),我想对ADFS进行身份验证 . 我做的步骤是:
- 要通知ADFS我的新WPF客户端,我运行了以下PowerShell脚本:
Add-ADFSClient -ClientType Public -Name“MyClient”-ClientId“E1CF1107-FF90-4228-93BF-26052DD2C714”-RedirectUri“https://E1CF1107-FF90-4228-93BF-26052DD2C714/redir'”
- 要验证客户端(Code-Wise),我使用了以下NuGet-Package:Microsoft.IdentityModel.Clients.ActiveDirectory(3.5(Alpha))然后我编写了以下代码:
string authority = "https://win2016preview.server.local/adfs/ls";
string resourceURI = "https://adfs.server.local/MyMVCApp";
string clientReturnURI = "https://e1cf1107-ff90-4228-93bf-26052dd2c714/redir";
string clientID = "E1CF1107-FF90-4228-93BF-26052DD2C714";
var ac = new AuthenticationContext(authority, false);
var ar = await ac.AcquireTokenAsync(resourceURI, clientID, new
Uri(clientReturnURI),
new PlatformParameters(PromptBehavior.Auto, new
WindowInteropHelper(this).Handle));
使用此代码,客户端应在ADFS上进行身份验证(我认为通过OAuth)并提示用户输入其组织凭据 . 如果我运行应用程序,则会出现此窗口:
我选择Yes(Ja)并打开凭证提示 . 同时发生以下异常
在事件日志中,如果服务器ADFS出现以下错误消息:
Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthAuthorizationUnauthorizedClientException:MSIS9321:收到无效的OAuth请求 . 禁止客户端“E1CF1107-FF90-4228-93BF-26052DD2C714”访问资源“https://adfs.server.local/MyMVCApp” . Microsoft.IdentityServer.Web.Protocols.OAuth.OAuthAuthorization.OAuthAuthorizationRequestContext.ValidateCore()at Microsoft.IdentityServer.Web.Protocols.ProtocolContext.Validate()at Microsoft.IdentityServer.Web.Protocols.OAuth.OAuthAuthorization.OAuthAuthorizationProtocolHandler.GetRequiredPipelineBehaviors(ProtocolContext) pContext)at Microsoft.IdentityServer.Web.PassiveProtocolListener.GatherDeviceSecurityToken(ProtocolContext protocolContext,PassiveProtocolHandler protocolHandler)at Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context)
据我所知,ADFS识别客户端ID并尝试对其进行身份验证 . 但ADFS拒绝客户端 . 我忘了配置一些东西吗?客户端应该只提示对ADFS进行身份验证的用户,以便客户端可以使用AuthenticationToken .
我希望你能跟着我 . 先感谢您!
1 回答
解决方案很简单:)
添加属性IssuanceAuthorizationRules(Add-ADFSRelyingPartyTrust)
-IssuanceAuthorizationRules'=> issue(Type =“http://schemas.microsoft.com/authorization/claims/permit " value = " true”);'