【问题标题】:How to validate a JWT from WSO2 API Manager如何从 WSO2 API Manager 验证 JWT
【发布时间】:2014-04-19 22:57:43
【问题描述】:

在后端 Web 服务位于单独的服务器上并且需要确定给定请求通过 APIM 网关身份验证和授权机制?

我知道 JWT 中的标头字段包含一个“x5t”字段,它是对租户密钥存储中证书的编码引用,如下所述:

https://asankastechtalks.wordpress.com/2013/12/05/obtaining-certificate-used-to-sign-a-jwt/

由于后端 Web 服务位于单独的服务器上,我们是否需要以某种方式将公钥分发给它?另外,我们如何更新用于签署 JWT 的证书,因为现在它使用的是默认值?

【问题讨论】:

标签: validation wso2 jwt wso2-am


【解决方案1】:

x5t 中的数据不是整个证书,它只是一个哈希值,可以帮助您识别您拥有的证书是否相同。这意味着您确实需要将公共证书上传到接收服务。

使用 https 可以在握手中检索公共证书,然后客户端可以检查此证书是否由受信任的 CA 签名。然而,通过这种验证,没有这样的机制,因此您不能只信任 CA,您必须信任每个公共证书。

还有另一个可选标头“x5u”,其中包含指向公共证书的 url 链接,但 APIM 没有设置该值。

【讨论】:

    【解决方案2】:

    这是您可以使用 WSO2 令牌中的 x5t 哈希作为查找从本地存储获取证书的方法:

    // Use JwtSecurityTokenHandler to validate the JWT token
    var tokenHandler = new JwtSecurityTokenHandler();
    
    // Read the JWT
    var parsedJwt = tokenHandler.ReadToken(token);
    
    // Get X509 public certificate
    var signerAlgorithm = ((JwtSecurityToken)parsedJwt).SignatureAlgorithm;
    var signerHash = ((JwtSecurityToken)parsedJwt).Header["x5t"];
    var thumbprint = Encoding.UTF8.GetString(Convert.FromBase64String(signerHash.ToString()));
    
    X509Store store = new X509Store(StoreName.TrustedPublisher);
    store.Open(OpenFlags.ReadOnly);
    var cert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false)[0];
    

    【讨论】:

    • 查看我上面的评论,我正在努力解决同样的问题。我缺乏运行此代码的上下文...我假设它是 Javascript,用 node.js 执行? (读取 JWT 是在服务器上完成的,而不是在 Web 客户端上)是否有任何在线实用程序可以让我放置 JWT 和证书文件并运行它? (有点像 jwt.io 解码 JWT)
    【解决方案3】:

    我认为您可以通过在身份提供者下的 API 管理器中导入证书来验证 JWT。

    假设您正在使用 Wso2 IS 生成 JWT 令牌,那么您需要导出 IS 的证书并将其导入 wso2 api manager..并且您必须验证密钥 'IDTokenIssuerID' 在 IS 和 API 中是否相同经理

    我认为这篇文章可以帮助你理解:https://medium.com/wso2-learning/how-to-protect-your-apis-with-self-contained-access-token-jwt-using-wso2-api-manager-and-wso2-75673d8a4686

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多