【问题标题】:ADFS vNext Client Authentication (WPF) (Windows Server 2016 Preview 3)ADFS vNext 客户端身份验证 (WPF) (Windows Server 2016 Preview 3)
【发布时间】:2015-10-25 08:59:47
【问题描述】:

我有一个配置了 ADFS vNext 的 Windows Server 2016 TechnicalPreview 3,作为第一个客户端,我创建了一个 MVC 应用程序作为 ReplingPartyTrust。 ADFS 的身份验证与 MVC 应用程序配合得非常好。 现在问题来了:我编写了一个本机应用程序 (WPF),我想针对 ADFS 进行身份验证。 我做的步骤是:

  1. 为了通知 ADFS 我的新 WPF 客户端,我运行了以下 PowerShell 脚本:

    Add-ADFSClient -ClientType Public -Name “MyClient” -ClientId “E1CF1107-FF90-4228-93BF-26052DD2C714” -RedirectUri “https://E1CF1107-FF90-4228-93BF-26052DD2C714/redir´”

  2. 为了验证客户端(Code-Wise),我使用了以下 NuGet 包: 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)并提示用户输入其组织凭据。 如果我运行该应用程序,则会出现此窗口:

我选择是 (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() 在 Microsoft.IdentityServer.Web.Protocols.ProtocolContext.Validate() 在 Microsoft.IdentityServer.Web.Protocols.OAuth.OAuthAuthorization.OAuthAuthorizationProtocolHandler.GetRequiredPipelineBehaviors(ProtocolContext pContext) 在 Microsoft.IdentityServer.Web.PassiveProtocolListener.GatherDeviceSecurityToken(ProtocolContext 协议上下文,PassiveProtocolHandler 协议处理程序) 在 Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext 上下文)

据我所知,ADFS 识别客户端 ID 并尝试对其进行身份验证。但是 ADFS 拒绝了客户端。 我忘了配置什么吗?客户端应该只提示用户,该用户针对 ADFS 进行身份验证,因此客户端可以拥有 AuthenticationToken。

希望你能关注我。提前谢谢!

【问题讨论】:

    标签: wpf powershell authentication oauth adfs


    【解决方案1】:

    解决方法很简单:)

    添加属性 IssuanceAuthorizationRules (Add-ADFSRelyingPartyTrust )

    -IssuanceAuthorizationRules '=> 问题(类型=“http://schemas.microsoft.com/authorization/claims/permit”值=“真”);'

    【讨论】:

    • 当我尝试上述操作时,我在 powershell 上得到以下信息“PS0238:不应将授权或身份验证规则与访问控制策略一起配置”
    • 所以你必须 powershell 并从这个 RPT 中删除“访问控制策略”,然后只尝试这个命令
    • 在那之后,我仍然得到同样的错误MSIS9321
    • 在 Windows 2016 RTM 上使用 ADFS,这不再有效。我在这里复制了这个确切的代码,并尝试了默认访问权限(允许所有人)和使用 -IssuanceAuthorizationRules 指定的权限,并且我继续获得 "MSIS9321: Received无效的 OAuth 请求。客户端被禁止访问资源” 错误。
    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 2019-06-24
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2012-08-01
    • 2015-06-13
    • 1970-01-01
    相关资源
    最近更新 更多