ADFS JWT 与 2 个发行人集成

问题描述 投票:0回答:1

我正在尝试使用 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 是我必须在解码器和应用程序属性中添加的发行者或 access_token_issuer

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: 
          jwk-set-uri:  
java spring-boot spring-security jwt adfs
1个回答
0
投票

在 yaml 中设置

jwk-set-uri
,并在 openid 配置中使用
jwks_uri
的值,并且:

  • 从 yaml 中删除
    issuer-uri
  • issuer-uri
    设置为 exactly 访问令牌中
    iss
    声明的值(大小写和尾部斜杠(如果有)很重要)

Spring Security 使用

issuer-uri
来做两件事(如果存在的话):

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

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

© www.soinside.com 2019 - 2024. All rights reserved.