lobe-chat

Форк
0
32 строки · 938.0 Байт
1
import { importJWK, jwtVerify } from 'jose';
2

3
import {
4
  JWTPayload,
5
  JWT_SECRET_KEY,
6
  NON_HTTP_PREFIX,
7
} from '@/const/auth';
8

9
export const getJWTPayload = async (token: string): Promise<JWTPayload> => {
10
  //如果是 HTTP 协议发起的请求,直接解析 token
11
  // 这是一个非常 hack 的解决方案,未来要找更好的解决方案来处理这个问题
12
  // refs: https://github.com/lobehub/lobe-chat/pull/1238
13
  if (token.startsWith(NON_HTTP_PREFIX)) {
14
    const jwtParts = token.split('.');
15

16
    const payload = jwtParts[1];
17

18
    return JSON.parse(atob(payload));
19
  }
20

21
  const encoder = new TextEncoder();
22
  const secretKey = await crypto.subtle.digest('SHA-256', encoder.encode(JWT_SECRET_KEY));
23

24
  const jwkSecretKey = await importJWK(
25
    { k: Buffer.from(secretKey).toString('base64'), kty: 'oct' },
26
    'HS256',
27
  );
28

29
  const { payload } = await jwtVerify(token, jwkSecretKey);
30

31
  return payload as JWTPayload;
32
};

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.