根本原因是MSIS9642ADFS 2016 中的新 OpenID Connect 应用程序组功能需要向您的应用程序颁发访问令牌。该令牌必须包含用户身份。为了发行令牌,子系统必须理解which索赔在inbound索赔用于唯一标识用户。
一个新的属性称为锚声明类型已添加到声明提供者信任模型中。
首次安装 ADFS 时,它会为 AD AUTHORITY 注册内置的声明提供者信任,并设置该值锚声明类型 to
foo://schemas.microsoft.com/ws/2008/06/identity/claims/Windows 帐户名
您可以使用 powershell 命令看到这一点获取 adfsclaimsprovidertrust.
这就是 OpenID 在针对 Active Directory 进行身份验证时发挥作用的原因。
当您创建新的声明提供者信任时,系统不会设置锚声明类型。 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) 设置锚类型声明将声明提供者信任为使用 powershell 选择的类型
设置-adfsclaimsprovidertrust-targetidentifier标识符-锚声明类型http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
(get 标识符从 powershell get-adfsclaimsprovidertrust)
d) 创建至少一个传入主要输入声明值的入站规则,在我们的示例中为名称
希望这可以帮助