Spring Security ADFS JWT与2个发行者集成

gstyhher  于 2023-11-19  发布在  Spring
关注(0)|答案(1)|浏览(128)

我试图授权的应用程序与adfs。foror许多天我认为问题是与授权本身
如何根据来自payload claim JWT的角色访问REST端点
然而,我发现在adfs中,你有一个发行者路径,但也有一个access_token_issuer。在分析了adfs的调用后,我意识到发行者和访问令牌发行者都需要以某种方式指定。没有发行者,就没有访问众所周知的,没有访问令牌-发行者令牌没有检查正确的发行者。有没有人经历过这种情况,并有任何线索如何修改JWT解码器使用发行者和访问-token issuer也是。

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:

31moq8wy

31moq8wy1#

在yaml中设置jwk-set-uri,并在openid-configuration中设置jwks_uri的值,然后:

  • 从yaml中删除issuer-uri(禁用iss声明验证)
  • 设置issuer-uriexactly您的访问令牌中iss声明的值(大小写和尾随斜杠,如果有的话,很重要)

Spring Security使用issuer-uri做两件事:

*如果jwk-set-uri属性丢失(仅在这种情况下),请尝试从已知路径获取OpenID配置并尝试从中获取jwks_uri

  • 向JWT解码器添加一个颁发者验证器(检查访问令牌中的iss声明是否与您提供的issuer-uri值完全相同)

Issuer validation是可选的(以及audience)。唯一需要的验证是token signature,Spring Security需要JWK-set的原因(显式提供或从issuer URI推断)。

相关问题