使用JJWT从Xero解析RS256 JWT

问题描述

我正在尝试从Xero解析JWT的SWT。 Xero文档指出“ JWT是使用您的客户端密钥和RS256签名算法签名的JSON有效负载”。 我可以从Xero获得JWT。我知道我的“客户秘密”(字符串)。

如何将它们与setSigningKey放在一起以验证对RS256的响应?使用Java。 谢谢

解决方法

您的目标是仅查看 id_token 中的数据正确吗?

如果您的目标是验证JWT的合法性,我建议您使用一个库来处理验证的安全性部分https://openid.net/developers/certified/

但是,如果您要查找的只是包含在其中的数据(电子邮件,名字,姓氏),则可以使用此库简单地解码JWT。或签出解码功能以自己滚动(它将以编程方式查找哈希算法并为您解码)

https://github.com/auth0/java-jwt#decode-a-token

,

感谢您提出这个问题。我是作为一个完整的初学者来到这里的,并且有相当长的学习曲线。因为我正在代理 Xero 登录,所以我可以用一个应用程序支持多个域,所以我需要手动处理 oauth2 的东西。 几乎没有任何问题,这让我有点发疯,所以我添加了一个 python 答案,以防它帮助其他人。

在python3中,这是如何做到的:

    # using pip install pyjwt[crypto]
    import jwt
    ...
         def decode_id_token(self,id_token):
             #a method in a class I have,self.client_id is from the Xero app
             #decoded_without_verification = jwt.decode(id_token,options={"verify_signature":False})

             discovery_url = "https://identity.xero.com/.well-known/openid-configuration/jwks"
             jwks_client = jwt.PyJWKClient(discovery_url)
             signing_key = jwks_client.get_signing_key_from_jwt(id_token)
             decoded = jwt.decode(id_token,signing_key.key,algorithms=["RS256"],audience=self.client_id)
             return decoded

我不知道是否有某种方法可以避免对发现 URL 进行硬编码。我从这个 Xero 讨论中得到它:https://community.xero.com/developer/discussion/115505302