@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
29 lines (20 loc) • 932 B
text/typescript
import { importJWK, jwtVerify } from 'jose';
import { JWTPayload, JWT_SECRET_KEY, NON_HTTP_PREFIX } from '@/const/auth';
export const getJWTPayload = async (token: string): Promise<JWTPayload> => {
//如果是 HTTP 协议发起的请求,直接解析 token
// 这是一个非常 hack 的解决方案,未来要找更好的解决方案来处理这个问题
// refs: https://github.com/lobehub/lobe-chat/pull/1238
if (token.startsWith(NON_HTTP_PREFIX)) {
const jwtParts = token.split('.');
const payload = jwtParts[1];
return JSON.parse(atob(payload));
}
const encoder = new TextEncoder();
const secretKey = await crypto.subtle.digest('SHA-256', encoder.encode(JWT_SECRET_KEY));
const jwkSecretKey = await importJWK(
{ k: Buffer.from(secretKey).toString('base64'), kty: 'oct' },
'HS256',
);
const { payload } = await jwtVerify(token, jwkSecretKey);
return payload as JWTPayload;
};