首页 文章

ADFS vNext客户端身份验证(WPF)(Windows Server 2016 Preview 3)

提问于
浏览
2

我有一个配置了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 回答

相关问题