bc632f9d56
/mcp-Bearer больше не пинит тип к ACCESS. Новый framework-free примитив
verifyMcpBearer верифицирует подпись ОДИН раз (bindMcpBearerVerifier пинит
allowlist {ACCESS, API_KEY}) и роутит:
- API_KEY → сперва биндинг к воркспейсу инстанса (чужой воркспейс — отказ), затем
общий row-check ApiKeyService.validate. HMAC-верификация (микросекунды) вместо
bcrypt, это НЕ попытка логина — Basic-путь и анти-брутфорс-лимитер не
затрагиваются (фикс удушения параллельных чтений агентов).
- ACCESS → прежний verifyBearerAccess (session-active + not-disabled), которому
передаётся замыкание над уже проверенным payload, так что «проверить один раз»
и «helper без изменений» сосуществуют.
Bearer-нога resolveMcpSessionConfig униформизирована: любой отказ авторизации →
единый generic-401 (анти-enumeration, класс отказа не течёт в тело), а
непредвиденная (инфра) ошибка ПРОБРАСЫВАЕТСЯ (→5xx), не маскируется под 401.
McpService получает ApiKeyService; McpModule импортирует ApiKeyModule.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
21 lines
1.0 KiB
TypeScript
21 lines
1.0 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { McpController } from './mcp.controller';
|
|
import { McpService } from './mcp.service';
|
|
import { DatabaseModule } from '@docmost/db/database.module';
|
|
import { AuthModule } from '../../core/auth/auth.module';
|
|
import { TokenModule } from '../../core/auth/token.module';
|
|
import { ApiKeyModule } from '../../core/api-key/api-key.module';
|
|
|
|
// Community MCP feature: the server itself serves the Model Context Protocol
|
|
// over HTTP at /mcp. DatabaseModule (global) provides WorkspaceRepo. AuthModule
|
|
// supplies AuthService (per-user HTTP-Basic login validation) and TokenModule
|
|
// supplies TokenService (Bearer JWT verification for the token path). ApiKeyModule
|
|
// supplies ApiKeyService (the shared api-key row-check for the API_KEY Bearer
|
|
// branch, so an agent authenticates with a key instead of the bcrypt Basic path).
|
|
@Module({
|
|
imports: [DatabaseModule, AuthModule, TokenModule, ApiKeyModule],
|
|
controllers: [McpController],
|
|
providers: [McpService],
|
|
})
|
|
export class McpModule {}
|