【问题标题】:wso2 api manager 3.1.0 jwks is not returning kid used to generate a tokenwso2 api manager 3.1.0 jwks 没有返回用于生成令牌的孩子
【发布时间】:2020-09-27 11:52:09
【问题描述】:

从 wso2 api manager 3.0.0 升级到 3.1.0 后,我面临验证由 wso2 生成的 JWT 令牌以访问后端 API 的问题:

deployment.toml 中的配置

[apim.jwt]
enable = true
encoding = "base64" # base64,base64url
generator_impl = "DefaultJWTGenerator" #example
claim_dialect = "http://wso2.org/claims"
header = "Authorization"
signing_algorithm = "SHA256withRSA"
enable_user_claims = true
claims_extractor_impl = "org.wso2.carbon.apimgt.impl.token.DefaultClaimsRetriever"

在 /oauth2/jwks url 的响应中缺少添加到生成令牌的孩子。

例如生成令牌的头部:

  "typ": "JWT",
  "alg": "RS256",
  "kid": "ODFjMzAxZjhmNzY2MDBhOTBlNDYwNGY2Yzc1MWM1YjgzYzJmYTJlMA"
}

来自 /oauth2/jwks 的响应:

{"keys":[{"kty":"RSA","e":"AQAB","use":"sig","kid":"M2Y4OGJhNzhlMzJiNzgwMjU3NDBmNTc3ZWIyNDNlMTQyYmQwM2JhZWIyNjgxODNlNGE4ODAwMTAyYWRmODI4Yg_RS256","alg":"RS256","n":"1n880ZJW22CKADeTMLm-d1K75fuUqu6ciV9-iw3kAfmevx_SMxpv5Gm7nj_t5HeXZcBKIhOQT-wZwdaZcEQBSEwXDOgNrGM4upYzGwqm6Q_lg7tAlpz_7zpJlf_buOlUwz0Fsbnuw25cYhMg67P1mSIQ8MuhfZ3mG_WScitDcGKKgNC0-9U6FN2txiauf2dVZzoSUrQLOvFhYmSO9z-Leb9pnhGLCPjXcStAoaHtI-F8yUXB-N-x1z0C1bp0KzaIPCIRdc5sy_8CYrAKVjp4bnuoaC5n5v3ciLTvBlvw5gvDMtLDdsmR4vmoBt2uz5_iEHMBEgb7q2ouwpDm2ER0PQ"}]}

我可以看到令牌中的孩子来自 keystore.jks 文件中的 wso2carbon 键。但是找不到 jwks 中的 key 来自哪里。

【问题讨论】:

    标签: wso2 jwt wso2-am


    【解决方案1】:

    问题是孩子生成从 SHA-1 更改为 SHA-256。如果您有同样的问题,您可以自定义 JWT 令牌生成并使用以下代码放置孩子:

    String certThumbPrint = OAuth2Util.getThumbPrint(tenantDomain, tenantId);
    JWSAlgorithm accessTokenSignAlgorithm = OAuth2Util.mapSignatureAlgorithmForJWSAlgorithm(signatureAlgorithm);
    String kid = OAuth2Util.getKID(certThumbPrint, accessTokenSignAlgorithm);
    
    

    【讨论】:

      猜你喜欢
      • 2017-07-28
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多