ADFS + OpenID Connect 电子邮件声明和外部 ADFS
ADFS + OpenID Connect email claim and external ADFS
我在 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.
有人对如何解决这个问题有建议吗?
MSIS9642 的根本原因是 ADFS 2016 中新的 OpenID Connect 应用程序组功能需要向您的应用程序颁发访问令牌。此令牌必须包含用户身份。为了发行令牌,子系统必须了解入站声明中的哪个声明用于唯一标识 用户。
一个名为 AnchorClaimType 的新 属性 已添加到声明提供者信任模型中。
首次安装 ADFS 时,它会为 AD AUTHORITY 注册一个内置的 Claim Provider Trust,并将 AnchorClaimType 的值设置为
foo://schemas.microsoft.com/ws/2008/06/identity/claims/windows 帐户名
您可以使用 powershell 命令 get-adfsclaimsprovidertrust.
查看
这就是 OpenID 在针对 Active Directory 进行身份验证时起作用的原因。
当您创建新的 Claim Provider Trust 时,系统不会设置 AnchorClaimType。 OpenID 系统无法颁发令牌,因为它不知道哪个入站声明构成了唯一的用户身份。这就是 OpenID 在针对外部 Claim Provider 信任进行身份验证时不起作用的原因。
为了解决这个问题,您需要采取一些措施:
a) 确认您是 运行 Windows Server 2016 RTM 不幸的是,CTP 中不存在用于设置 AnchorClaimType 的 powershell 属性,并且无法使用 UI.
设置 属性
b) 从代表用户身份的入站令牌中选择一个声明并标识声明类型。在我们的例子中,我们与 Azure Active Directory 联合并选择 name,类型为 foo://schemas.xmlsoap.org/ws/2005/05/identity/claims/名字
c) 将 Claim Provider Trust 的 AnchorTypeClaim 设置为使用 powershell
选择的类型
set-adfsclaimsprovidertrust -targetidentifier identifier -AnchorClaimType http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
(从 powershell get-adfsclaimsprovidertrust 获取 标识符 )
d) 创建至少一个通过主要输入声明值的入站规则,在我们的例子中是 Name
希望对您有所帮助
要解决缺少 AnchorClaimType 参数的问题,以解决额外添加的声明提供者信任 (CPT) Windows Server 2016 TP5(直到支持结束)可以使用。
解决方法:
- 如果 CPT 已经存在,请删除 CPT。
- 使用 powershell 命令 Add-AdfsClaimsProviderTrust
- 任一参数明智(参见Technet Description)
- 或者使用元数据URL + 参数-AnchorClaimType "yourAnchorClaimValue".
- 创建至少一个通过主要输入声明值的入站规则
在我的例子中,以下 PS 命令解决了问题:
[String]$ClaimProviderTrustName = "YourCPTName"
[String]$MetaDataURL = "https://..."
[String]$AnchorClaimType = "YourAnchorClaimValue"
Add-AdfsClaimsProviderTrust -Name $ClaimProviderTrustName -MetadataUrl $MetaDataURL -AnchorClaimType $AnchorClaimType
我在微软工作。我的客户有同样的错误。这就是我们修复它的方式。我们使用了 Claims x-ray。我们让他们使用来自 Active Directory 的身份登录,然后使用使用外部声明提供者信任的身份登录。
当我们比较声明 X-Ray 输出时,anchorclaimtype 的值在声明提供者信任测试登录中看起来不正确。我们对声明提供程序进行了更改,以发布 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress 作为锚声明类型并解决了问题。
v-michall@microsoft.com
我在 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.
有人对如何解决这个问题有建议吗?
MSIS9642 的根本原因是 ADFS 2016 中新的 OpenID Connect 应用程序组功能需要向您的应用程序颁发访问令牌。此令牌必须包含用户身份。为了发行令牌,子系统必须了解入站声明中的哪个声明用于唯一标识 用户。
一个名为 AnchorClaimType 的新 属性 已添加到声明提供者信任模型中。
首次安装 ADFS 时,它会为 AD AUTHORITY 注册一个内置的 Claim Provider Trust,并将 AnchorClaimType 的值设置为
foo://schemas.microsoft.com/ws/2008/06/identity/claims/windows 帐户名
您可以使用 powershell 命令 get-adfsclaimsprovidertrust.
查看这就是 OpenID 在针对 Active Directory 进行身份验证时起作用的原因。
当您创建新的 Claim Provider Trust 时,系统不会设置 AnchorClaimType。 OpenID 系统无法颁发令牌,因为它不知道哪个入站声明构成了唯一的用户身份。这就是 OpenID 在针对外部 Claim Provider 信任进行身份验证时不起作用的原因。
为了解决这个问题,您需要采取一些措施:
a) 确认您是 运行 Windows Server 2016 RTM 不幸的是,CTP 中不存在用于设置 AnchorClaimType 的 powershell 属性,并且无法使用 UI.
设置 属性b) 从代表用户身份的入站令牌中选择一个声明并标识声明类型。在我们的例子中,我们与 Azure Active Directory 联合并选择 name,类型为 foo://schemas.xmlsoap.org/ws/2005/05/identity/claims/名字
c) 将 Claim Provider Trust 的 AnchorTypeClaim 设置为使用 powershell
选择的类型set-adfsclaimsprovidertrust -targetidentifier identifier -AnchorClaimType http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
(从 powershell get-adfsclaimsprovidertrust 获取 标识符 )
d) 创建至少一个通过主要输入声明值的入站规则,在我们的例子中是 Name
希望对您有所帮助
要解决缺少 AnchorClaimType 参数的问题,以解决额外添加的声明提供者信任 (CPT) Windows Server 2016 TP5(直到支持结束)可以使用。
解决方法:
- 如果 CPT 已经存在,请删除 CPT。
- 使用 powershell 命令 Add-AdfsClaimsProviderTrust
- 任一参数明智(参见Technet Description)
- 或者使用元数据URL + 参数-AnchorClaimType "yourAnchorClaimValue".
- 创建至少一个通过主要输入声明值的入站规则
在我的例子中,以下 PS 命令解决了问题:
[String]$ClaimProviderTrustName = "YourCPTName"
[String]$MetaDataURL = "https://..."
[String]$AnchorClaimType = "YourAnchorClaimValue"
Add-AdfsClaimsProviderTrust -Name $ClaimProviderTrustName -MetadataUrl $MetaDataURL -AnchorClaimType $AnchorClaimType
我在微软工作。我的客户有同样的错误。这就是我们修复它的方式。我们使用了 Claims x-ray。我们让他们使用来自 Active Directory 的身份登录,然后使用使用外部声明提供者信任的身份登录。
当我们比较声明 X-Ray 输出时,anchorclaimtype 的值在声明提供者信任测试登录中看起来不正确。我们对声明提供程序进行了更改,以发布 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress 作为锚声明类型并解决了问题。
v-michall@microsoft.com