1

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

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

4

2 回答 2

0

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

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

但是,如果您要查找的只是其中包含的数据(电子邮件、名字、姓氏),您可以使用此库简单地解码 JWT。或者检查解码函数来滚动你自己的(它会以编程方式查找散列算法并为你解码)

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

于 2020-09-17T15:13:22.240 回答
0

感谢您提出这个问题。我作为一个完整的初学者来到这里,并且有相当长的学习曲线。因为我正在代理 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

于 2020-12-31T03:15:53.973 回答