react-native - 在 React Native Expo 应用程序中解码没有 key 的 JWT token

标签 react-native jwt decode

我的应用目前正在 expo 上运行,我需要一种方法来解码从后端收到的 JWT token 。当我使用 jwt.io 时,它不需要 key 来解码,但我似乎找不到支持 expo 的库不需要 key 来解码。我尝试使用下面的代码在没有库的情况下对其进行解码,但它不起作用:-

JSON.parse(new Buffer(token.split(‘.’)[1], ‘base64’.toString())); 

我曾尝试使用一些 expo 库,但我发现的所有内容都需要一个 key 来解码,如果我将一个空字符串传递给该 key ,它就不会解码。 我也试过不用库解码

通过 jwt.io 解码我的 JWT token 后的预期结果是下面的对象:

{
  "id": "5ce667c89133fd61e7f08c53",
  "name": "TEST Group",
  "username": "chia.wq@redtech.my",
  "type": "G",
  "iat": 1560152565
}

有没有其他方法可以让我在没有 key 的情况下通过使用或不使用 Expo 上的 React Native 中的库进行解码?

最佳答案

JWT key 只是在这里签署 token ,所以 yes 可以在没有 key 的情况下提取数据。

您唯一缺少的是缓冲区不是以 Base64 编码,而是以“URL Base64”编码。

在将 token 部分传递给 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);

关于react-native - 在 React Native Expo 应用程序中解码没有 key 的 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546048/

相关文章:

python - 通过 Python 套接字/WebSocket 客户端发送/接收 WebSocket 消息

javascript - React hooks 重置状态并获取数据

javascript - React-native - 使用已转换为 URL 的 Blob 填充图像

javascript - 当 TextInput 获得焦点时,如何自动将窗口从键盘后面滑出?

java - 为什么采用 ECDH 加密算法的 JsonWebSignature 每次都会给出不同的签名?

decode - 我如何在 Paw 中解码 JWT token

java - 从浏览器上传后解码存储在数据库中的二进制文件

javascript - react native : changing state via external function doesn't rerender

java - 如何使用 If else 语句 java 进行身份验证过滤器

javascript - 如果我使用基于 token 的身份验证,我还需要 session 吗