Prompteo

Unidad 6 · 2 min

Ahora con autenticación

El desafío 401, los metadatos de recurso protegido, el parámetro resource y la validación de audiencia.

Ahora con autenticación

La autorización en MCP es opcional. Si la implementas sobre HTTP, deberías seguir esta especificación; con STDIO no deberías hacerlo: ahí las credenciales se toman del entorno.

Se apoya en OAuth 2.1 y en un conjunto de RFC: 6750 (bearer), 8414 (metadatos del servidor de autorización), 8707 (indicadores de recurso) y 9728 (metadatos de recurso protegido).

Los papeles

Tu servidor MCP protegido es el resource server de OAuth 2.1. El cliente MCP es el cliente. El authorization server emite los tokens y puede ser una entidad separada.

El desafío

Todo empieza con un 401:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource",
                         scope="files:read"

El servidor MCP DEBE implementar RFC 9728 (Protected Resource Metadata), y el cliente DEBE usarla para descubrir el servidor de autorización.

El parámetro resource

El cliente DEBE enviar el parámetro resource de RFC 8707 en la petición de autorización y en la de token, con la URI canónica del servidor MCP. https://mcp.example.com/mcp es válida; mcp.example.com (sin esquema) y https://mcp.example.com#fragment (con fragmento) no lo son.

Del lado del servidor

El token va en Authorization: Bearer <access-token> en cada petición, y nunca en la cadena de consulta. El servidor DEBE validar que el token fue emitido para él como audiencia, y NO DEBE aceptar ni retransmitir otros tokens.

Los códigos

401 autorización requerida o token inválido · 403 permisos o alcances insuficientes · 400 petición mal formada. Ante alcances insuficientes se responde 403 con error="insufficient_scope" y el scope necesario.