chore: 鉴权认证优化

This commit is contained in:
手瓜一十雪
2024-08-11 11:07:11 +08:00
parent b5e8218551
commit 2a5d2cc146

View File

@@ -10,6 +10,7 @@ import { NapCatCore } from '@/core';
import { NapCatOneBot11Adapter } from '..'; import { NapCatOneBot11Adapter } from '..';
import { LogWrapper } from '@/common/utils/log'; import { LogWrapper } from '@/common/utils/log';
import { OB11HeartbeatEvent } from '../event/meta/OB11HeartbeatEvent'; import { OB11HeartbeatEvent } from '../event/meta/OB11HeartbeatEvent';
import { IncomingMessage } from 'http';
export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter { export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter {
wsServer: WebSocketServer; wsServer: WebSocketServer;
@@ -24,32 +25,16 @@ export class OB11PassiveWebSocketAdapter implements IOB11NetworkAdapter {
logger: LogWrapper; logger: LogWrapper;
private heartbeatIntervalId: NodeJS.Timeout | null = null; private heartbeatIntervalId: NodeJS.Timeout | null = null;
authorize(token: string, wsClient: WebSocket, wsReq: any) { authorize(token: string | undefined, wsClient: WebSocket, wsReq: IncomingMessage) {
if (token && token.length > 0) { if (!token || token.length == 0) return;//客户端未设置密钥
const url = wsClient.url!.split('?').shift(); let QueryClientToken = urlParse.parse(wsReq?.url || "", true).query.access_token;
this.logger.log('ws connect', url); let HeaderClientToken = wsReq.headers.authorization?.split('Bearer ').pop() || '';
let clientToken: string = ''; let ClientToken = typeof (QueryClientToken) === 'string' && QueryClientToken !== "" ? QueryClientToken : HeaderClientToken;
const authHeader = wsReq.headers['authorization']; if (ClientToken === token) {
if (authHeader) { return;
clientToken = authHeader.split('Bearer ').pop() || '';
this.logger.log('receive ws header token', clientToken);
} else {
const parsedUrl = urlParse.parse(wsClient.url || '/', true);
const urlToken = parsedUrl.query.access_token;
if (urlToken) {
if (Array.isArray(urlToken)) {
clientToken = urlToken[0];
} else {
clientToken = urlToken;
}
this.logger.log('receive ws url token', clientToken);
}
}
if (clientToken != token) {
wsClient.send(JSON.stringify(OB11Response.res(null, 'failed', 1403, 'token验证失败')));
return wsClient.close();
}
} }
wsClient.send(JSON.stringify(OB11Response.res(null, 'failed', 1403, 'token验证失败')));
wsClient.close();
} }
constructor(ip: string, port: number, heartbeatInterval: number, token: string, coreContext: NapCatCore, onebotContext: NapCatOneBot11Adapter) { constructor(ip: string, port: number, heartbeatInterval: number, token: string, coreContext: NapCatCore, onebotContext: NapCatOneBot11Adapter) {