我在使用Windows Server 2016上的OpenID Connect设置ADFS时遇到了困难。
我已设置AD进行测试,我可以成功进行身份验证,但电子邮件声明不在ID令牌中。
此外,我在声明提供商信任中设置了外部ADFS。它显示为一个选项,但在登录时我收到错误:
MSIS9642: The request cannot be completed because an id token is required but the server was unable to construct an id token for the current user.
有人建议如何解决这个问题吗?
答案 0 :(得分:8)
MSIS9642 的根本原因是ADFS 2016中新的OpenID Connect应用程序组功能需要向您的应用程序发出访问令牌。此令牌必须包含用户标识。要发布令牌,子系统必须了解 入站声明中的声明用于唯一标识用户。
声明提供商信任模型中添加了一个名为 AnchorClaimType 的新属性。
首次安装ADFS时,它会为AD AUTHORITY注册内置的Claim Provider Trust,并将 AnchorClaimType 的值设置为
FOO://schemas.microsoft.com/ws/2008/06/identity/claims/的 windowsaccountname 强>
您可以使用powershell命令 get-adfsclaimsprovidertrust 来查看此内容。
这就是OpenID在针对Active Directory进行身份验证时的工作原理。
创建新的Claim Provider Trust时,系统不会设置 AnchorClaimType 。 OpenID系统无法发出令牌,因为它不知道哪个入站声明构成了唯一的用户身份。这就是在对外部索赔提供商信任进行身份验证时,OpenID不起作用的原因。
要解决此问题,您需要采取一些措施:
a)确认您正在运行 Windows Server 2016 RTM 不幸的是,在CTP中不存在设置AnchorClaimType的powershell属性,并且无法使用UI设置该属性。
b)从入站令牌中选择一个表示用户身份并声明声明类型的声明。在我们的案例中,我们与Azure Active Directory联合并选择 name ,类型为foo://schemas.xmlsoap.org/ws/2005/05/identity/claims/ name 强>
c)将Claim Provider Trust的 AnchorTypeClaim 设置为使用powershell选择的类型
set-adfsclaimsprovidertrust -targetidentifier 标识符 -AnchorClaimType http://schemas.xmlsoap.org/ws/2005/05/identity/claims/ 名称
(来自powershell的标识符 get-adfsclaimsprovidertrust)
d)创建至少一个通过主输入声明值的入站规则,在我们的例子中名称
希望这有帮助
答案 1 :(得分:0)
要解决缺少 AnchorClaimType 参数以解决其他已添加的声明提供程序信任(CPT)的问题, Windows Server 2016 TP5 (直到支持结束)的解决方法可以是使用
解决方法:强>
在我的情况下,以下PS命令解决了问题:
{{1}}