如何使用 Oauth2.0 解码不透明的访问令牌
Posted
技术标签:
【中文标题】如何使用 Oauth2.0 解码不透明的访问令牌【英文标题】:How to decode opaque Access Token with Oauth2.0 【发布时间】:2020-12-12 20:47:52 【问题描述】:我有一个令牌密钥,其中包含登录的个人电子邮件地址以及姓名和其他端点。这实际上用于 xero API 连接。
scope = 'offline_access accounting.reports.read accounting.settings.read openid profile email'
我需要解码此令牌密钥并获取登录的电子邮件地址和登录人的姓名。
例如,我的令牌密钥如下。
b9b73c12b40a3bc1441f5bda331c4d7c64c0394956d5105eec61a71de19f8153
如何解码这个不透明的访问令牌并使用 python 获取相关信息。
【问题讨论】:
您的令牌看起来像您在示例中显示的那样(没有 JWT,可能是不透明的令牌)还是看起来像 eyJxxxxx.eyxxxxx.yyyyyy 的 JWT(由.
分隔的三个部分第 1 部分和第 2 部分以“ey”开头)?
@jps 嗨,是的,令牌密钥看起来像我提供的方式。我们可以解码它并获取用户电子邮件地址,以及我该怎么做,谢谢您的合作
我也使用了 OAuth2.0
我编辑了问题以反映这个不透明的访问令牌
opaque tokens 的本质是它们不应该被你解码/解密。
【参考方案1】:
客户端不应该直接解码访问令牌,正如 jps 所说。您有以下选择:
从 ID 令牌中读取用户字段
UI 直接读取此 JWT,如 Step 18 of my blog post。 id 令牌始终具有 JWT 格式,旨在供客户端读取
使用用户信息端点
UI 可以使用上述博文第 24 步中的消息将访问令牌发送到用户信息端点。
从 API 获取用户信息
这往往是最具扩展性的选项,因为您可以返回任何您想要的信息,而且您不受访问令牌中包含的内容的限制。博文的第 27 步使用了此选项。
【讨论】:
【参考方案2】:const token = req.headers.authorization.split(" ")[1]; //Bearer +token
const decodedToken = jwt.verify(token, "secret_message_long_string");
req.userData = email: decodedToken.email, userId: decodedToken.userId ;
这个例子是为nodejs解码数据。
在 python 中尝试同样的方法。导入 jwt 并使用方法 verfiy 将令牌和秘密字符串作为参数传递。
【讨论】:
对不起,这个答案没有多大意义。问题是关于 python 的,但你回答的是 node.js。然后问题没有显示 JWT,而是显示不透明的令牌,因此该代码不起作用。即使在 JWT 的情况下,已经有很多答案展示了如何解码 JWT,所以无论如何它都是重复的答案。以上是关于如何使用 Oauth2.0 解码不透明的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
Android - 如何获取 google plus 访问令牌?
使用 OAuth 2.0 访问令牌访问 Gmail Imap