Autentique usuarios finales con su propio proveedor de identidad authentication
De forma predeterminada, cada acción de la aplicación es pública. Cualquier plataforma LLM con la URL de su servidor MCP puede llamar a esas acciones, y su controlador no puede identificar al usuario final.
Active la autenticación cuando una acción necesite saber qué usuario final solicita, por ejemplo, devolver sus pedidos, derechos o detalles de cuenta. La plataforma LLM inicia sesión con su proveedor de identidad (IdP), envía el token de acceso resultante con cada llamada y su controlador recibe la identidad verificada.
En esta guía: Aprenda a conectar a su proveedor de identidad y a elegir qué acciones requieren el inicio de sesión. Utilice la identidad verificada en sus controladores, implemente la aplicación y pruebe las acciones de inicio de sesión y protegidas.
La configuración de la autenticación es una tarea avanzada. Complete primero Configuración de infraestructura, Crear acciones y Implementar su aplicación.
Funcionamiento
Traes tu propio proveedor de identidad. La aplicación implementada es solo un servidor de recursos de OAuth 2.1; verifica los tokens que emitió el servidor de autorización. Nunca emite tokens y Adobe nunca almacena su ID de cliente o secreto de cliente.
┌── Your identity provider ───────────────────────────────────────────────┐
│ Authorization server — you own it │
│ Issues access tokens, holds the user directory, defines the scopes │
└─────────────────────────────────────────────────────────────────────────┘
▲ 2 user signs in, platform gets an access token
│ │
│ 1 platform discovers your │ 3 every tools/call carries
│ authorization server from │ Authorization: Bearer <token>
│ your app's metadata ▼
┌── LLM platform (ChatGPT, Claude, …) ────────────────────────────────────┐
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌── Your LLM App on Adobe I/O Runtime ────────────────────────────────────┐
│ Resource server — verifies the token's signature, issuer, audience, │
│ and expiry, then enforces the auth mode you set for each action │
│ │
│ Your handler reads the verified identity from its second argument │
└─────────────────────────────────────────────────────────────────────────┘
Configure la autenticación por entorno. Fase y Producción tienen configuraciones independientes. Compruebe la configuración con un inquilino de IdP de desarrollo antes de habilitar la autenticación en Production.
Antes de empezar
- Un proveedor de identidad OAuth 2.1 u OpenID Connect que emite tokens de acceso JWT firmados con un algoritmo asimétrico. No se admiten tokens opacos ni tokens firmados por HMAC. Consulte Requisitos de token.
- Acceso de administrador a ese proveedor de identidad para registrar una API y un cliente.
- La aplicación se implementó al menos una vez en el entorno que está configurando. La URL del servidor MCP implementado es el valor al que deben vincularse los tokens.
Copiar el identificador de recurso
El identificador de recurso de su aplicación es la URL de su servidor MCP. Cada token de acceso que el proveedor de identidad emita para la aplicación debe nombrar esa URL exacta como su audiencia. Este enlace de audiencia evita el uso de un token emitido para otro servicio.
- Abra la página Detalles de la aplicación.
- Desplácese hasta Probar la aplicación.
- En el entorno que está configurando, seleccione Copiar URL.
Mantenga la URL del servidor MCP copiada para la configuración del proveedor de identidad en el siguiente paso. Pegue la dirección URL en lugar de volver a escribirla. La comprobación de audiencia requiere una coincidencia de cadena exacta, incluida la ruta. Una sola diferencia de caracteres hace que cada token falle en la validación.
Configuración del proveedor de identidad
Los pasos varían según el proveedor. Configure los cuatro elementos siguientes.
- Registre su aplicación como una API (recurso). Establezca su identificador (el valor que el proveedor pone en la notificación
auddel token) en la URL del servidor MCP copiada. Los proveedores suelen etiquetar este campo Identificador o Audiencia. Use un identificador único de la aplicación, no un valor genérico comoapi, para evitar el uso de tokens emitidos para otro servicio. - Defina los ámbitos que protegen sus acciones, por ejemplo
orders:readoprofile:read. Utilice un ámbito por permiso significativo para que cada acción solicite únicamente el acceso que necesita. - PKCE de soporte. Las plataformas LLM envían un
code_challengeconcode_challenge_method=S256en cada solicitud de autorización, por lo que el servidor de autorización debe admitir S256 PKCE y anunciar"code_challenge_methods_supported": ["S256"]en sus metadatos. - Elija cómo la plataforma LLM identifica a su cliente OAuth. Utilice documentos de metadatos de ID de cliente (CIMD) si su proveedor admite los requisitos de la plataforma, el registro dinámico de clientes (DCR) o un cliente OAuth preregistrado. Proporcione un ID de cliente y un secreto solo cuando el método elegido lo requiera. Registre el URI de redireccionamiento exacto documentado o mostrado por la plataforma; para las superficies hospedadas de Claude, que es
https://claude.ai/api/mcp/auth_callback. ChatGPT puede usar una llamada de retorno estable o específica del conector según las capacidades anunciadas del proveedor, así que copie su URI mostrado en lugar de adivinar. Consulte la documentación de autenticación de ChatGPT actual y la documentación de autenticación Claude.
Activar autenticación
-
En el panel de navegación izquierdo, seleccione Configuración y, a continuación, abra la pestaña Autenticación.
-
En Workspace, elija Fase o Producción.
-
Activar Habilitar autenticación.
-
En Configuración principal, escriba:
- Emisor: la dirección URL del emisor HTTPS de su proveedor de identidad, que también es el valor que pone en la notificación
issde cada token. La plataforma requiere esta dirección URL y publica el emisor como servidor de autorización de la aplicación para la detección de clientes LLM. Cada aplicación admite un proveedor de identidad. - Ámbitos admitidos: se permite que todas las acciones de esta aplicación requieran cada ámbito. Refleje los ámbitos definidos en el proveedor de identidad.
- Emisor: la dirección URL del emisor HTTPS de su proveedor de identidad, que también es el valor que pone en la notificación
-
Configuración avanzada es opcional. Establezca JWKS URI solo cuando las claves de firma no estén en el lugar donde los metadatos del servidor de autorización las anuncian; de lo contrario, la aplicación las detecta automáticamente.
-
Seleccione Guardar.
Para conocer los requisitos de campo, consulte Configuración de autenticación.
Elija un modo de autenticación para cada acción
Cuando activa Habilitar autenticación, cada acción establecida actualmente en Ninguno cambia a Requerido. En Configuración por acción, revise esa asignación y establezca el modo que necesita cada acción:
Las acciones ya establecidas en Obligatorio o Opcional mantienen su modo existente.
Para una acción Requerida o Opcional, agregue los Ámbitos que necesita. Todos los ámbitos deben aparecer en Ámbitos admitidos, de modo que la aplicación anuncie todos los permisos necesarios a las plataformas LLM. La plataforma bloquea el guardado hasta que se resuelve cualquier discrepancia en el ámbito.
Ámbitos admitidos controla los ámbitos disponibles. Al quitar un ámbito de esa lista, se quita inmediatamente el ámbito de todas las acciones que lo requieran. Agregue cada ámbito a la lista antes de asignar el ámbito a una acción.
Si se selecciona Requerir autenticación en todas las acciones, se cambian Ninguna acciones a Requerido, pero se conservan las acciones ya establecidas en Opcional. Para requerir el inicio de sesión en cada acción, cambie las filas opcionales restantes a Requeridas de forma individual. Al desactivar la casilla de verificación, todas las acciones se devuelven a None.
Seleccione Guardar cuando haya terminado. Los cambios de modo y ámbito de autenticación se guardan junto con la configuración de nivel de aplicación.
ChatGPT admite modos de autenticación mixtos en una aplicación y aplica el modo de cada acción de forma individual. Las acciones públicas no solicitan el inicio de sesión; las acciones protegidas solicitan el inicio de sesión según sea necesario.
Claude también admite aplicaciones mixtas mediante autenticación diferida. Con Iniciar sesión cuando sea necesario seleccionado durante la configuración del conector, las acciones públicas se pueden usar de forma anónima y la plataforma solicita iniciar sesión cuando se llama a una acción Requerida. Una aplicación cuyas acciones sean todas Requeridas requiere inicio de sesión antes de usar. Consulte Comportamiento de la plataforma LLM para ver la distinción entre una acción necesaria y un controlador opcional que solicita el inicio de sesión.
Implementación del cambio
Los cambios de autenticación se aplicarán en la próxima implementación de esta aplicación. Vuelva a implementar la aplicación en el entorno que configuró. Ver Implementar tu aplicación.
La URL del servidor MCP no cambia. Actualice los metadatos de la conexión y compruebe que sus opciones de autenticación coinciden con la nueva configuración de la aplicación. Una plataforma puede requerir que vuelva a conectarse o que vuelva a crear la conexión cuando cambie su método de autenticación.
Leer la identidad en el controlador
Una identidad verificada llega al controlador como el segundo argumento cada vez que el llamador envía un token válido, independientemente del modo de autenticación de la acción. Una acción Opcional puede usar esa identidad para personalizar los resultados cuando estén disponibles y devolver un resultado anónimo en caso contrario.
Use getAuthenticatedUser para leer al usuario que inició sesión:
const { getAuthenticatedUser } = require('@adobe/llm-apps-runtime');
module.exports = async ({ orderId }, extra) => {
const userId = getAuthenticatedUser(extra);
if (!userId) {
return { content: [{ type: 'text', text: 'Sign in to see your orders.' }] };
}
const order = await fetchOrderForUser(userId, orderId);
return {
content: [{ type: 'text', text: `Order ${order.id} is ${order.status}.` }],
structuredContent: order
};
};
El motor en tiempo de ejecución verifica el token por usted. Para una acción Required, bloquea todas las llamadas que carecen de un token válido con los ámbitos enumerados. El controlador sólo se ejecuta para un llamador autorizado. Use hasScope para elegir el comportamiento del controlador en función de un permiso; por ejemplo, en una acción Opcional.
Para solicitar el inicio de sesión durante una conversación, devuelva extra.challengeAuth() del controlador. El asistente solo está disponible en acciones opcionales:
module.exports = async ({ signIn }, extra) => {
if (signIn && !extra.authInfo) {
return extra.challengeAuth({
error: 'invalid_token',
errorDescription: 'Sign in to see member pricing.'
});
}
return {
content: [{
type: 'text',
text: extra.authInfo ? await memberDeals() : await publicDeals()
}]
};
};
Use un parámetro de entrada explícito, como signIn en este ejemplo, para decidir cuándo solicitar autenticación. No deduzca esa decisión de la redacción del usuario.
Establezca error para que coincida con la condición notificada. Use invalid_token cuando el llamador no tenga una sesión válida y necesite iniciar sesión, como en el ejemplo anterior. Use insufficient_scope cuando el llamador haya iniciado sesión, pero el token no tiene el ámbito requerido. Cada plataforma LLM elige la redacción rápida y cómo responder al código de error. Envíe el código que describa con precisión la condición.
Solicite la autenticación solo cuando falte la identidad requerida, como lo hace la comprobación !extra.authInfo en este ejemplo. El inicio de sesión no resuelve un desafío incondicional: el controlador solicita de nuevo la autenticación en cada llamada.
extra.challengeAuth() devuelve un desafío de resultado de herramienta para ChatGPT. Claude necesita en su lugar un desafío de autenticación HTTP antes de que se ejecute el controlador. Para una operación que requiera el inicio de sesión en todas las plataformas compatibles, use una acción Requerido. Mantenga una acción separada None para la experiencia pública si es necesario.Mantener el lado del servidor de identidad. Pase solamente los datos que necesita el widget a structuredContent. Nunca incluya un token de acceso en structuredContent. Vea Personalizar un controlador generado.
Para obtener el contrato completo, consulte API de autenticación de controlador.
Prueba de la aplicación protegida
El complemento o conector existente utiliza la configuración actualizada después de la implementación. Para crear una nueva conexión, siga las instrucciones de la plataforma:
ChatGPT
En el cuadro de diálogo Nuevo complemento, configure Autenticación para que coincida con la forma en que configuró las acciones de la aplicación:
Una acción Optional siempre acepta llamadas anónimas, por lo que una aplicación que contenga una nunca estará completamente cerrada: elija Mixta aunque cada acción esté establecida en Opcional. Solo obligatorio rechaza los llamadores no autenticados.
Consulte Probar el complemento ChatGPT para ver el resto del cuadro de diálogo.
Claude
Añada el conector personalizado y revise su configuración de autenticación. Para una aplicación mixta pública/protegida, elige Iniciar sesión cuando sea necesario cuando esté disponible. Para solicitar el inicio de sesión antes de usar el conector, seleccione Iniciar sesión ahora. El cuadro de diálogo varía según la cuenta u organización; consulte Probar el conector Claude.
Verificar
- La plataforma le redirige a la página de inicio de sesión de su propio proveedor de identidad.
- Una acción protegida devuelve datos específicos del usuario después de iniciar sesión.
- Una acción protegida le pedirá que inicie sesión cuando haya cerrado la sesión.
- En una aplicación mixta, una acción establecida en None sigue respondiendo sin iniciar sesión. En Claude, compruebe la acción pública con Inicie sesión cuando sea necesario.
- Después de iniciar sesión, vuelva a intentar la acción protegida y confirme que el motor en tiempo de ejecución aplica los permisos esperados.
Si el inicio de sesión no se inicia o se rechaza un token, consulte Solución de problemas.
Guía de seguridad
- Conceda el ámbito más limitado que cada acción necesita. No reutilice un ámbito amplio en cada acción.
- Mantenga el cliente en secreto en su proveedor de identidad y en la configuración del conector de la plataforma LLM. Nunca lo ponga en metadatos de acción, código de controlador, JavaScript de widget o control de código fuente.
- Trate las notificaciones de tokens como entrada desde un sistema externo. Valide los valores de
authInfo.extraantes de usar esos valores en una consulta. - Autorizar y autenticar. Un token válido prueba la identidad del usuario, no su permiso para leer un registro determinado. Compruebe la propiedad en el controlador antes de devolver los datos.
- No registre tokens, conjuntos de notificaciones completos ni identificadores de usuario.
- Devolver errores seguros. No muestre respuestas del proveedor de identidad ascendente ni trazos de pila al usuario.
- Configure y verifique Stage con un inquilino de proveedor de identidad que no sea de producción antes de habilitar la autenticación en Production.
Siguientes pasos
- Referencia de autenticación: campos, requisitos de token y comportamiento de la plataforma.
- Personalizar un controlador generado: llame a una API ascendente protegida desde un controlador.
- Implemente su aplicación.