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

ADFS vNext客户端身份验证(WPF)(Windows Server 2016预览版3),wpf,powershell,authentication,oauth,adfs,Wpf,Powershell,Authentication,Oauth,Adfs,我有一个配置了ADFS vNext的Windows Server 2016 TechnicalPreview 3,作为第一个客户端,我创建了一个MVC应用程序作为ReplingPartyTrust。 ADF的身份验证在MVC应用程序中非常有效。 现在来看问题:我已经编写了一个本机应用程序(WPF),我想对其进行ADF身份验证。 我采取的步骤是: 为了通知ADF我的新WPF客户端,我运行了以下PowerShell脚本: 添加ADFSClient-ClientType Public-名称“MyCli

我有一个配置了ADFS vNext的Windows Server 2016 TechnicalPreview 3,作为第一个客户端,我创建了一个MVC应用程序作为ReplingPartyTrust。 ADF的身份验证在MVC应用程序中非常有效。 现在来看问题:我已经编写了一个本机应用程序(WPF),我想对其进行ADF身份验证。 我采取的步骤是:

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

    添加ADFSClient-ClientType Public-名称“MyClient”-ClientId“E1CF1107-FF90-4228-93BF-26052DD2C714”-重定向URI“'

  • 为了验证客户端(代码方面),我使用了以下NuGet包: Microsoft.IdentityModel.Clients.ActiveDirectory(3.5(Alpha)) 然后我编写了以下代码:

  • 字符串权限=”https://win2016preview.server.local/adfs/ls";
    字符串resourceURI=”https://adfs.server.local/MyMVCApp";
    字符串clientReturnURI=”https://e1cf1107-ff90-4228-93bf-26052dd2c714/redir";
    字符串clientID=“E1CF1107-FF90-4228-93BF-26052DD2C714”;
    var ac=新的AuthenticationContext(authority,false);
    var ar=await ac.AcquireTokenAsync(resourceURI、clientID、new
    Uri(clientReturnURI),
    新平台参数(PromptBehavior.Auto,新
    WindowInteropHelper(this.Handle));
    
    有了这段代码,客户机应该在ADF(我认为是通过OAuth)进行身份验证,并提示用户输入他的组织凭据。 如果我运行该应用程序,将显示此窗口:

    我选择Yes(Ja)并打开凭证提示。同时发生以下异常

    在事件日志中,如果服务器ADFS出现以下错误消息:

    Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthAuthorizationUnauthorizedClient异常:MSIS9321:收到无效的OAuth请求。客户端“E1CF1107-FF90-4228-93BF-26052DD2C714”被禁止访问资源”。 位于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 ProtocolContext,PassiveProtocolHandler protocolHandler) 位于Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext上下文)

    据我所知,ADFS识别客户机Id并尝试对其进行身份验证。但ADFS拒绝了客户。 我忘记配置什么了吗?客户端应该只提示用户,用户根据ADF进行身份验证,这样客户端就可以拥有AuthenticationToken


    我希望你能跟我来。提前谢谢你

    解决方案非常简单:)

    添加属性IssuanceAuthorizationRules(添加ADFSRelyingPartyTrust)


    -IssuanceAuthorizationRules'=>issue(Type=”“value=“true”);'

    当我尝试上述操作时,我在powershell上获得了以下信息“PS0238:不应将授权或身份验证规则与访问控制策略一起配置”,因此您必须使用powershell并从此RPT中删除“访问控制策略”,然后仅尝试此命令,在Windows 2016 RTM上使用ADFS时,我仍然收到相同的错误MSIS9321,这不再有效。我在这里复制了这段代码,并使用-IssuanceAuthorizationRules尝试了默认的访问权限(允许所有人)和此处指定的权限,并且使用这两种权限,我继续得到“MSIS9321:接收到无效的OAuth请求。客户端被禁止访问资源”错误。