ADFS + OpenID Connect电子邮件声明和外部ADFS

时间:2016-02-09 15:00:52

标签: active-directory adfs openid-connect windows-server-2016

我在使用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.

有人建议如何解决这个问题吗?

2 个答案:

答案 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 (直到支持结束)的解决方法可以是使用

解决方法:

  1. 如果CPT已存在,请删除CPT。
  2. 使用powershell命令Add-AdfsClaimsProviderTrust
    • 参数明智(参见Technet Description
    • 或使用元数据网址+参数-AnchorClaimType“yourAnchorClaimValue”。
  3. 创建至少一个通过主要输入声明的值的入站规则
  4. 在我的情况下,以下PS命令解决了问题:

    {{1}}