在 React Native Expo 应用程序中无需密钥即可解码 JWT 令牌

2024-01-10

我的应用程序当前正在博览会上运行,我需要一种方法来解码从后端收到的 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(使用前将#替换为@)

在 React Native Expo 应用程序中无需密钥即可解码 JWT 令牌 的相关文章

随机推荐