如何在AD FS中为Web应用指定Claims Provider
应用类型与配置命令不匹配
OIDC 应用对应的配置对象是AdfsClient而非AdfsWebApiApplication,仅配置Web API侧的声明提供方规则不会作用于前端登录的OIDC客户端。执行Get-AdfsClient可查看当前AD FS中所有注册的OIDC客户端,确认你要配置的目标应用对应的客户端名称。
示例配置命令:Set-AdfsClient -TargetName "你的OIDC应用名称" -AllowedClaimsProviders @("指定的声明提供方完整名称")
注意:声明提供方名称需要与Get-AdfsClaimsProviderTrust返回的Name字段完全一致,大小写、特殊符号均不能有差异应用组双侧配置遗漏
如果你使用的是AD FS应用组(同时包含客户端和Web API资源),需要同时为客户端、关联的Web API都配置相同的允许声明提供方列表,仅配置单侧会导致规则不生效。对应Web API的配置命令为:Set-AdfsWebApiApplication -TargetName "应用组内Web API资源名称" -AllowedClaimsProviders @("指定的声明提供方完整名称")全局HRD策略优先级覆盖
如果之前配置过全局的自定义主领域发现(HRD)策略,全局策略的优先级会高于单应用的允许列表配置。可执行Get-AdfsHomeRealmDiscoveryPolicy查看是否存在绑定了所有应用的全局HRD策略,若存在可给目标应用单独绑定自定义HRD策略,优先级将高于全局配置。配置未生效或缓存影响
配置完成后需要重启AD FS服务触发规则生效,可执行Restart-Service adfssrv完成重启。同时AD FS登录页面会缓存HRD配置,建议使用浏览器隐私模式、清除站点Cookie后再测试,避免旧缓存导致规则看起来未生效。OIDC请求参数覆盖
检查发起的OIDC身份验证请求中是否携带了whr、claims_provider等强制指定声明提供方的参数,或是请求的scope字段关联了其他需要额外声明提供方的资源,都会导致配置的允许列表被覆盖。
内容的提问来源于stack exchange,提问作者David Churchland

