我的应用程序当前正在博览会上运行,我需要一种方法来解码从后端收到的 JWT 令牌。当我使用jwt.io
它不需要密钥来解码,但我似乎找不到支持博览会的库不需要密钥来解码。我尝试使用下面的代码在没有库的情况下对其进行解码,但它不起作用:-
JSON.parse(new Buffer(token.split(‘.’)[1], ‘base64’.toString()));
我尝试过使用一些博览会库,但我发现的所有库都需要一个密钥才能解码,如果我将空字符串传递给该密钥,它就无法解码。
我也尝试过在没有库的情况下进行解码
通过解码我的 JWT 令牌后,预期结果是下面的对象jwt.io
:
{
"id": "5ce667c89133fd61e7f08c53",
"name": "TEST Group",
"username": "[email protected] /cdn-cgi/l/email-protection",
"type": "G",
"iat": 1560152565
}
有没有其他方法可以让我在没有密钥的情况下通过使用或不使用 Expo 上的 React Native 中的库进行解码?
JWT 密钥仅用于对令牌进行签名,因此 yes 可以在没有密钥的情况下提取数据。
您唯一缺少的是缓冲区不是以 Base64 编码,而是以“URL Base64”编码。
在将令牌部分传递给之前Buffer
您必须将所有“-”替换为“+”,将所有“_”替换为“/”。
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
const parts = token.split('.').map(part => Buffer.from(part.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString());
const payload = JSON.parse(parts[1]);
console.log('JWT payload', payload);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)