MSIS9642的根本原因是 ADFS 2016 中的新 OpenID Connect 应用程序组功能需要向您的应用程序颁发访问令牌。此令牌必须包含用户身份。为了发布令牌,子系统必须了解入站声明中的哪个声明用于唯一标识用户。
一个名为AnchorClaimType的新属性已添加到 Claim Provider Trust 模型中。
首次安装 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不幸的是,用于设置 AnchorClaimType 的 powershell 属性在 CTP 中不存在,并且无法使用 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) 创建至少一个通过主要输入声明的值的入站规则,在我们的例子中为名称
希望这可以帮助