我以前有一个使用
Windows 2012 R2 ADFS进行身份验证的富客户端,并将其记录为
here.我们正在转向Windows 2016 RTM ADFS(因为2012 R2不能正确支持Web Apps / ADAL.js),我正在努力翻译/扩展配置工作.无论我做什么,当客户端点击ADFS时我很快就会收到错误:
MSIS9321: Received invalid OAuth request. The client 'LL957F23-D6C5-4D52-8A40-4F26B3408888' is forbidden to access the resource '<relying-party-url>'
我已经为ADFS 2016的预览版本找到了几个对此问题的响应,并且所有建议使用相同的解决方案 – 使用powershell设置依赖方并指定以下选项:
-IssuanceAuthorizationRules '=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit",Value = “true”);'
但是,我已经采用了这些解决方案显示的确切代码,并尝试手动将访问控制策略设置为“允许所有人”(默认),或者使用-IssuanceAuthorizationRules设置,并且都没有解决此问题.
解决方法
好的,我有这个工作.与Windows 2012 R2上的ADFS相比,还有一些其他配置.
在Windows Server 2016 ADFS上,我们需要设置一个应用程序组,它将一个或多个客户端链接到他们希望使用的服务(依赖方).
打开ADFS管理控制台,在左侧右键单击“应用程序组”和“添加应用程序组…”
选择一个客户端 – 服务器模板允许您在向导的一次传递中设置链接的客户端和服务器.如果像我一样,您已经定义了客户端应用程序,则可以选择独立Web Api并稍后链接现有客户端.
在这种情况下,向导的第2页只需要Web Api标识符 – 目标资源URL或其他字符串标识符(它在ADFS上的所有依赖方之间必须是唯一的).
在第3页上,您选择了一个访问控制策略 – 我采用默认值而不是“Permit Everyone”.
在第4页上,您可以添加需要令牌的现有客户端以访问顶部面板中的Web API,并指定允许的范围:例如OpenID Connect授权或请求刷新令牌的功能.
就是这样.这摆脱了客户端被禁止为我访问资源错误.我没有必要使用其他帖子中描述的自定义-IssuanceAuthorizationRules.