Enlace de sesión con URL de autorización de OAuth 2.0
AgentCore Identity permite recuperar los tokens de acceso de OAuth 2.0 para que las aplicaciones de sus agentes accedan a proveedores de aplicaciones de terceros o a recursos protegidos por proveedores de identidad o servidores de autorización. Si una aplicación o un recurso requieren que un usuario autorice de forma explícita mediante un flujo de códigos de autorización de OAuth, AgentCore Identity genera una URL de autorización para que el usuario navegue y dé su consentimiento al acceso. A continuación, una vez que el usuario dé su consentimiento, AgentCore Identity obtiene el token de acceso de la aplicación o el recurso en nombre de los usuarios y lo almacena en el almacén de tokens de AgentCore identidad.
Sin embargo, dado que un usuario puede enviar accidentalmente la URL de autorización a otro usuario y obtener acceso a la aplicación o el recurso de ese usuario, la aplicación debe comprobar que el usuario que inicia una solicitud de autorización sigue siendo el mismo que el usuario que ha dado su consentimiento a la aplicación o al recurso. Para ello, debe registrar un punto final de aplicación HTTPS disponible públicamente con AgentCore Identity que se encargue de la verificación de los usuarios.
Cómo funciona la vinculación de sesiones
El siguiente diagrama de flujo y los pasos correspondientes muestran el proceso de vinculación de sesiones con la URL de autorización de OAuth 2.0:
-
Invocar el agente: el código de su agente invoca la
GetResourceOauth2TokenAPI para recuperar una URL de autorización cuando un usuario del agente de origen quiere acceder a alguna aplicación o recurso de su propiedad. he/she -
Generar URL de autorización: AgentCore Identity genera una URL de autorización y un URI de sesión para que el usuario navegue y dé su consentimiento al acceso.
-
Autorizar y obtener el token de acceso: el usuario navega hasta la URL de autorización y otorga su consentimiento para que su agente acceda al his/her recurso. Después, AgentCore Identity redirige el navegador del usuario al punto final de la aplicación HTTPS con la información que contiene el usuario que originó la solicitud de autorización. En este punto, el punto final de la aplicación HTTPS determina si el usuario del agente de origen sigue siendo el mismo que el usuario que ha iniciado sesión actualmente en la aplicación. Si coinciden, el punto final de la aplicación se invoca
CompleteResourceTokenAuthpara que AgentCore Identity pueda recuperar y almacenar el token de acceso. -
Re-invoke agente para obtener el token de acceso: una vez que la aplicación devuelva una respuesta válida, su aplicación de agente podrá recuperar los tokens de OAuth2.0 acceso que se solicitaron originalmente para el usuario. Si los usuarios no coinciden, la aplicación simplemente no hace nada o registra el intento.
Al permitir que el punto final de la aplicación verifique la identidad del usuario, AgentCore Identity permite que la aplicación agente se asegure de que siempre es el mismo usuario que inició la solicitud de autorización y el que consintió el acceso.
Detalles de la implementación
Los siguientes pasos explican cómo configurar la identidad de la carga de trabajo, el proveedor de credenciales de OAuth 2.0 y el cliente de la aplicación OAuth 2.0 desde el proveedor de recursos para recuperar un token de acceso de OAuth 2.0 para la aplicación de su agente.
importante
Cuando utilizas la AgentCore CLI agentcore dev en un entorno local, para simplificar el desarrollo y las pruebas locales, la CLI aloja el punto final de devolución de llamada y llama a la CompleteResourceTokenAuth API en tu nombre para verificar la sesión del usuario y obtener los tokens de acceso de OAuth 2.0, de modo que puedas saltarte los pasos 1, 2 y 4 de la siguiente configuración. Sin embargo, al implementar el código de agente en AgentCore Runtime, la aplicación web que se conecta al tiempo de ejecución del agente debe alojar un punto final de devolución de llamada HTTPS de acceso público, el punto final de devolución de llamada debe registrarse con la identidad de la carga de trabajo como una AllowedResourceOAuth2ReturnUrl llamada UpdateWorkloadIdentity con el ID de agente proporcionado por AgentCore Runtime y, a continuación, llamar a la CompleteResourceTokenAuth API después de verificar la sesión del navegador del usuario actual para proteger sus flujos de autorización de OAuth 2.0.
Para implementar el enlace de sesión con la URL de autorización de OAuth 2.0
-
Crea una URL de aplicación: para tu aplicación de navegador orientada al usuario, crea y aloja una nueva URL a la que se pueda acceder desde el navegador del usuario y que pueda aceptar solicitudes de redireccionamientos del navegador. Esta página debería redirigir a una página de aplicación para que el usuario pueda continuar con su sesión de agente o mostrar alguna página web básica en la que se indique a los usuarios que devuelvan su sesión de agente actualmente activa. En las fases posteriores de la implementación, esta página se utiliza para validar la sesión activa del usuario actual, por lo que también debería poder acceder a los datos de la sesión del usuario de la aplicación y mantenerlos.
Por ejemplo, es posible que los usuarios de su aplicación interactúen con un agente en una página principal de la aplicación, por ejemplo
https://myagentapp.com/assistant. Querrás mostrar una nueva URL como lahttps://myagentapp.com/callbackque, por ahora, redirigirá a la página principal de la aplicación. La lógica del código actual de su/callbackterminal se actualizará más adelante al seguir esta guía. -
Actualice la identidad de la carga de trabajo con la URL de la aplicación: (se puede omitir si se realiza una prueba local mediante AgentCore CLI) Una vez que haya creado y alojado una URL de aplicación para que AgentCore Identity la redirija, actualice la identidad de la carga de trabajo para que la URL de la aplicación se registre como.
AllowedResourceOauth2ReturnUrlAsegúrese de que las credenciales de IAM utilizadas tengan permisos para llamarCreateWorkloadIdentityo enUpdateWorkloadIdentityfunción de si va a crear una nueva identidad de carga de trabajo o a actualizar una existente.nota
En el caso de las identidades de carga de trabajo creadas en su nombre por AgentCore Runtime o Gateway, el nombre de la identidad de la carga de trabajo corresponderá al ID de tiempo de ejecución o al ID de puerta de enlace que emitan los servicios.
Ejemplo de llamada a la
UpdateWorkloadIdentityAPI:aws bedrock-agentcore-control update-workload-identity --name GoogleCalendarAgent \ --allowed-resource-oauth2-return-urls https://myagentapp.com/callback -
Cree un proveedor de credenciales de OAuth 2.0 en AgentCore Identity: para registrar completamente el proveedor de credenciales de OAuth 2.0, necesita permisos para llamar y.
CreateOauth2CredentialProviderUpdateOauth2CredentialProviderSiga estos pasos:-
Llama
CreateOauth2CredentialProvidercon marcadores de posición para el ID y el secreto del cliente. -
La respuesta de la API contendrá una URL de devolución de llamada (redireccionamiento) de OAuth, como la siguiente:
https://bedrock-agentcore.amazonaws.com/identities/callback/123-456-7890Registra este valor, ya que es específico para cada proveedor que se cree y el proveedor de recursos de OAuth 2.0 lo necesitará más adelante.
-
Ve a tu proveedor de recursos (por ejemplo, Google o GitHub) y crea un cliente de aplicaciones OAuth 2.0. Proporciona la URL de devolución de llamada emitida por el servicio desde la
CreateOauth2CredentialProviderllamada al proveedor de recursos como URL de devolución de llamada de OAuth 2.0 permitida. -
Una vez creado el cliente de la aplicación OAuth 2.0, registra el ID de cliente y el secreto de cliente asignados al cliente de tu aplicación, ya que necesitas actualizar el proveedor de credenciales de OAuth 2.0 con estos valores.
-
Llama
UpdateOauth2CredentialProvidery proporciona el ID de cliente y el secreto de cliente proporcionados por el proveedor de recursos, sustituyendo los valores de marcador de posición que se proporcionaron al crear el proveedor de credenciales.
-
-
Agrega un controlador de código para las llamadas CompleteResourceTokenAuth: una vez que hayas creado tu proveedor de credenciales de OAuth 2.0, agrega el código y los permisos de IAM para llamar a la API en el
CompleteResourceTokenAuthcontrolador de URL de tu aplicación. Al llamar a laCompleteResourceTokenAuthAPI, tu aplicación debe presentar el token ouser_idcadena de OAuth original del proveedor de identidad entrante que se utilizó para generar el token de acceso a la carga de trabajo para representar al usuario y a la aplicación agente que participan en el flujo de autorización de OAuth 2.0. Esta información debe obtenerse de la sesión de la aplicación activa en el navegador del usuario (normalmente mediante una cookie del navegador o en el almacenamiento local del navegador) y no debe extraerse de la memoria caché de ninguna sesión remota.Además, cada URL de autorización que genera AgentCore Identity se identifica de forma única con su propio URI de sesión. Este URI de sesión también debe presentarse junto con el identificador de usuario para vincular la sesión con el usuario previsto.
importante
Antes de que la aplicación llame a la
CompleteResourceTokenAuthAPI, la aplicación debe comprobar que el usuario actual tiene una sesión activa y válida con la aplicación. De este modo, la aplicación puede asociar al usuario deseado a la sesión de autorización. Además, si tienes un servicio de backend del que depende tu aplicación, puedes mover el código que llama a laCompleteResourceTokenAuthAPI a tu backend y hacer que tu aplicación reenvíe el token OAuth del proveedor de identidad entrante o a tu backend.user_idEjemplo de código de aplicación:
def _handle_3lo_callback(self, request: Request) -> JSONResponse: session_id = request.query_params.get("session_id") if not session_id: console.print("Missing session_id in OAuth2 3LO callback") return JSONResponse(status_code=400, content={"message": "missing session_id query parameter"}) session_details = validate_session_cookies(request.cookies.get('my-application-cookie')) user_id = None if oauth2_config: user_id = session_details.get(USER_ID) if not user_id: console.print(f"Missing {USER_ID} in session_details") return JSONResponse(status_code=500, content={"message": "Internal Server Error"}) console.print(f"Handling 3LO callback for workload_user_id={user_id} | session_id={session_id}", soft_wrap=True) region = agent_config.aws.region if not region: console.print("AWS Region not configured") return JSONResponse(status_code=500, content={"message": "Internal Server Error"}) identity_client = IdentityClient(region) identity_client.complete_resource_token_auth( session_uri=session_id, user_identifier=UserIdIdentifier(user_id=user_id) ) return JSONResponse(status_code=200, content={"message": "OAuth2 3LO flow completed successfully"}) -
Prueba: una vez que haya completado la configuración, estará listo para probar la integración. Comience por llamar
GetResourceOauth2Tokeny, en su navegador, vaya a la URL de autorización que aparece. Tras completar la autorización en el proveedor de recursos de OAuth 2.0, deberías ver cómo el navegador se redirige a la URL de tu aplicación e invoca la API.CompleteResourceTokenAuthCuando la aplicación devuelva una respuesta válida, tu aplicación agente podrá recuperar los tokens de acceso de OAuth 2.0 que se solicitaron originalmente para el usuario. Estos tokens se pueden obtener llamando a la API.GetResourceOauth2Token
Consideraciones adicionales
Al implementar el enlace de sesión mediante URL de autorización de OAuth 2.0, ten en cuenta las siguientes consideraciones:
-
Cada URL de autorización y su identificador de sesión correspondiente solo son válidos durante 10 minutos.
-
Para proteger el punto final de devolución de llamadas de su aplicación contra los ataques de CSRF, le recomendamos encarecidamente que genere un estado opaco para incluirlo en la llamada a la API.
GetResourceOAuth2TokenTu aplicación debería poder analizar este valor para garantizar que atiende las solicitudes iniciadas por la aplicación de tu agente.