ADFS JWT 与 2 个颁发者集成

ADFS JWT integration with 2 issuers

提问人:cUser 提问时间:11/17/2023 最后编辑:cUser 更新时间:11/18/2023 访问量:28

问:

我正在尝试使用 adfs 授权应用程序。很多天,我虽然问题出在授权本身

如何根据来自有效负载声明 JWT 的角色获取对 REST 端点的访问权限

但是,我发现在 adfs 中,您有一个颁发者路径,但也有一个access_token_issuer。在分析了对 adfs 的调用之后,我重新确定需要以某种方式指定颁发者和访问令牌颁发者。没有颁发者,就无法访问已知的令牌,如果没有访问令牌颁发者,则不会再次检查正确的颁发者。有没有人体验过这一点,并且知道如何修改 JWT 解码器以使用颁发者和访问令牌颁发者。

  issueruri = adfs uri that has also the well known config
   accessIssuerUri = the one that I receive in the claims in the iss

  @Bean
 public JwtDecoder jwtDecoder() {
     return NimbusJwtDecoder.withIssuerLocation(this.issuerUri).build();
  }

完整的代码也在我添加为链接的问题中。

openId 配置包含如下内容

{
    "issuer": "https://base-url/adfs",
    "authorization_endpoint": "https://base-url/adfs/oauth2/authorize/",
    "token_endpoint": "https://base-url/adfs/oauth2/token/",
    "jwks_uri": "https://base-url/adfs/discovery/keys",
....
    "access_token_issuer": "http://base-url/adfs/services/trust",
 .....
}

是颁发者还是access_token_issuer者,我必须添加到解码器和应用程序属性中

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: 
          jwk-set-uri:  
java spring-boot spring-security jwt adfs

评论


答:

1赞 ch4mp 11/18/2023 #1

在 yaml 中设置,其值为 openid-configuration,并且:jwk-set-urijwks_uri

  • 从 YAML 中删除(禁用声明验证)issuer-uriiss
  • 在访问令牌中设置正好声明的值(大小写和尾部斜杠(如果有)很重要)issuer-uriiss

如果存在,Spring Security 用于两件事:issuer-uri

  • 如果缺少jwk-set-uri属性(并且仅在这种情况下),请尝试从已知路径获取OpenID配置并尝试从中获取jwks_uri
  • 将颁发者验证器添加到 JWT 解码器(检查访问令牌中的声明是否与你提供的值完全相同ississuer-uri)

颁发者验证是可选的(以及受众验证)。唯一需要的验证是令牌签名,这是 Spring Security 需要 JWK 集的原因(显式提供或从颁发者 URI 推断)。

评论

0赞 cUser 11/20/2023
我还有一个问题,您是如何设置trustore位置/密码的?:)
0赞 ch4mp 11/21/2023
Trustore 是为了什么?
0赞 cUser 11/21/2023
我的意思是我已经为 ADFS 挂载了一个 trustore,我需要在我的资源(位置)中指定它,所以当我调用 adfs 时,能够安全地调用它(是否有类似 spriing.security.ouath.trustorelocation 的东西)
1赞 ch4mp 11/21/2023
用于保护通信通道的密钥和用于对令牌进行签名的密钥是不同的东西。我的 OIDC 授权服务器正在使用 letsencrypt for https 的良好旧 SSL 证书。