我正在尝试解析Xero for SSO中的JWT。Xero文档声明“JWT是使用您的客户端秘密和RS256签名算法签名的JSON有效负载”。我可以从Xero那里拿到JWT。我知道我的“客户端秘密”(字符串)。
如何将其整合到setSigningKey中以验证对RS256的响应?使用Java。谢谢
发布于 2020-09-17 23:13:22
您的目标是只查看id_token中的数据,对吗?
如果您的目标是验证https://openid.net/developers/certified/的合法性,我建议您使用一个库来处理验证JWT的安全性部分
但是,如果您要查找的只是其中包含的数据(电子邮件、名字、姓氏),则可以使用此库简单地解码JWT。或者签出你自己的解码函数(它将以编程方式查找散列算法并为你解码)
发布于 2020-12-31 11:15:54
感谢你提出这个问题。我是作为一个完全的初学者来到这里的,有一个相当长的学习曲线。因为我代理了Xero signin,所以我可以用一个应用程序支持多个域,所以我需要手动处理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
https://stackoverflow.com/questions/63934848
复制相似问题