mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-07-19 12:03:37 +00:00
chore: 鉴权认证优化
This commit is contained in:
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user