Liaison de session avec URL d'autorisation OAuth 2.0
AgentCore Identity fournit des jetons d'accès OAuth 2.0 permettant à vos applications d'agent d'accéder à des fournisseurs d'applications tiers ou à des ressources protégées par des fournisseurs d'identité/des serveurs d'autorisation. Si une application ou une ressource nécessite une autorisation explicite d'un utilisateur à l'aide d'un flux de code d'autorisation OAuth, AgentCore Identity génère une URL d'autorisation à laquelle l'utilisateur peut accéder et autoriser l'accès. Ensuite, lorsque l'utilisateur donne son consentement, AgentCore Identity récupère le jeton d'accès depuis l'application ou la ressource pour le compte des utilisateurs et le stocke dans le coffre de jetons AgentCore d'identité.
Toutefois, étant donné qu'un utilisateur peut accidentellement envoyer l'URL d'autorisation à un autre utilisateur et accéder à l'application ou à la ressource de cet utilisateur, votre application doit vérifier que l'utilisateur qui lance une demande d'autorisation est toujours le même que celui qui a accordé son consentement à l'application ou à la ressource. Pour ce faire, vous devez enregistrer un point de terminaison d'application HTTPS accessible au public avec AgentCore Identity qui gère la vérification des utilisateurs.
Comment fonctionne la liaison de session
Le schéma de flux suivant et les étapes correspondantes montrent le processus de liaison de session par URL d'autorisation OAuth 2.0 :
-
Invoquer l'agent — Le code de votre agent invoque
GetResourceOauth2Tokenl'API pour récupérer une URL d'autorisation, lorsqu'un utilisateur de l'agent d'origine souhaite accéder à une application ou à une ressource qui en he/she est propriétaire. -
Générer une URL d'autorisation — AgentCore Identity génère une URL d'autorisation et un URI de session auxquels l'utilisateur peut accéder et autoriser l'accès.
-
Autoriser et obtenir un jeton d'accès : l'utilisateur accède à l'URL d'autorisation et autorise votre agent à accéder à la his/her ressource. AgentCore Identity redirige ensuite le navigateur de l'utilisateur vers le point de terminaison de votre application HTTPS avec des informations contenant l'utilisateur à l'origine de la demande d'autorisation. À ce stade, le point de terminaison de votre application HTTPS détermine si l'utilisateur de l'agent d'origine est toujours le même que l'utilisateur actuellement connecté à votre application. S'ils correspondent, le point de terminaison de votre application
CompleteResourceTokenAuthest invoqué afin qu' AgentCore Identity puisse récupérer et stocker le jeton d'accès. -
Re-invoke agent pour obtenir un jeton d'accès — Une fois que l'application aura renvoyé une réponse valide, votre application agent sera en mesure de récupérer les jetons d' OAuth2.0 accès initialement demandés pour l'utilisateur. Si les utilisateurs ne correspondent pas, votre application ne fait simplement rien ou enregistre la tentative.
En permettant au point de terminaison de votre application de vérifier l'identité de l'utilisateur, AgentCore Identity permet à votre application d'agent de s'assurer que c'est toujours le même utilisateur qui a initié la demande d'autorisation et celui qui a consenti à l'accès.
Détails de l'implémentation
Les étapes suivantes vous expliquent comment configurer l'identité de la charge de travail, le fournisseur d'informations d'identification OAuth 2.0 et le client d'application OAuth 2.0 auprès du fournisseur de ressources afin de récupérer un jeton d'accès OAuth 2.0 pour votre application d'agent.
Vous pouvez vous référer à un exemple de code comme exemple d'application fonctionnelle : implémentation du serveur de rappel OAuth 2.0
Important
Lorsque vous utilisez la AgentCore CLI agentcore dev dans un environnement local, pour simplifier le développement et les tests locaux, la CLI héberge le point de terminaison de rappel et appelle l'CompleteResourceTokenAuthAPI en votre nom pour vérifier la session utilisateur afin d'obtenir des jetons d'accès OAuth 2.0 afin que vous puissiez ignorer les étapes 1, 2 et 4 de la configuration suivante. Toutefois, lors du déploiement de votre code d'agent sur AgentCore Runtime, votre application Web qui se connecte à l'environnement d'exécution de l'agent doit elle-même héberger un point de terminaison de rappel HTTPS accessible au public, le point de terminaison de rappel doit être enregistré AllowedResourceOAuth2ReturnUrl par rapport à l'identité de la charge de travail sous forme d'appel UpdateWorkloadIdentity en utilisant l'ID d'agent fourni par AgentCore Runtime, puis appeler l'CompleteResourceTokenAuthAPI après avoir vérifié la session de navigateur de l'utilisateur actuel pour sécuriser vos flux d'autorisation OAuth 2.0.
Pour implémenter la liaison de session par URL d'autorisation OAuth 2.0
-
Création d'une URL d'application : pour votre application de navigateur destinée aux utilisateurs, créez et hébergez une nouvelle URL accessible depuis le navigateur de l'utilisateur et capable d'accepter les demandes provenant des redirections du navigateur. Cette page doit soit rediriger vers une page d'application permettant à votre utilisateur de poursuivre sa session d'agent, SOIT afficher une page Web de base demandant à vos utilisateurs de retourner leur session d'agent actuellement active. Dans les étapes ultérieures de l'implémentation, cette page est utilisée pour valider la session active de l'utilisateur actuel. Elle devrait donc également être en mesure d'accéder aux données de session utilisateur de votre application et de les gérer.
Par exemple, les utilisateurs de votre application peuvent interagir avec un agent sur une page principale de l'application, par exemple
https://myagentapp.com/assistant. Vous voudrez exposer une nouvelle URL comme celle-ci,https://myagentapp.com/callbackqui redirigera pour l'instant vers la page principale de l'application. La logique du code réel de votre/callbackpoint de terminaison sera mise à jour ultérieurement en suivant ce guide. -
Mettre à jour l'identité de la charge de travail avec l'URL de l'application — (Peut être ignorée en cas de test local via la AgentCore CLI) Une fois que vous avez créé et hébergé une URL d'application vers laquelle AgentCore Identity doit être redirigée, mettez à jour l'identité de votre charge de travail afin que l'URL de l'application soit enregistrée en tant
AllowedResourceOauth2ReturnUrlque. Assurez-vous que les informations d'identification IAM utilisées sont autorisées à appelerCreateWorkloadIdentityouUpdateWorkloadIdentityselon que vous créez une nouvelle identité de charge de travail ou que vous mettez à jour une identité existante.Note
Pour les identités de charge de travail créées en votre nom par AgentCore Runtime ou Gateway, le nom de l'identité de charge de travail correspondra à l'ID d'exécution ou à l'ID de passerelle émis par les services.
Exemple d'appel d'
UpdateWorkloadIdentityAPI :aws bedrock-agentcore-control update-workload-identity --name GoogleCalendarAgent \ --allowed-resource-oauth2-return-urls https://myagentapp.com/callback -
Créer un fournisseur d'informations d'identification OAuth 2.0 dans AgentCore Identity — Pour enregistrer complètement le fournisseur d'informations d'identification OAuth 2.0, vous devez être autorisé à appeler et.
CreateOauth2CredentialProviderUpdateOauth2CredentialProviderProcédez comme suit :-
Appelez
CreateOauth2CredentialProvideravec des espaces réservés pour l'identifiant du client et le secret du client. -
La réponse de l'API contiendra une URL de rappel (redirection) OAuth telle que :
https://bedrock-agentcore.amazonaws.com/identities/callback/123-456-7890Enregistrez cette valeur car elle est spécifique à chaque fournisseur créé et sera requise ultérieurement par le fournisseur de ressources OAuth 2.0.
-
Accédez à votre fournisseur de ressources (par exemple, Google ou GitHub) et créez un client d'application OAuth 2.0. Fournissez l'URL de rappel émise par le service lors de l'
CreateOauth2CredentialProviderappel au fournisseur de ressources en tant qu'URL de rappel OAuth 2.0 autorisée. -
Une fois le client d'application OAuth 2.0 créé, enregistrez l'ID client et le secret client attribués à votre client d'application, car vous devez mettre à jour le fournisseur d'informations d'identification OAuth 2.0 avec ces valeurs.
-
Appelez
UpdateOauth2CredentialProvideret fournissez l'ID client et le secret client fournis par le fournisseur de ressources, en remplaçant les valeurs d'espace réservé fournies lors de la création du fournisseur d'informations d'identification.
-
-
Ajouter un gestionnaire de code pour les appels CompleteResourceTokenAuth : une fois que vous avez créé votre fournisseur d'informations d'identification OAuth 2.0, ajoutez le code et les autorisations IAM pour appeler l'
CompleteResourceTokenAuthAPI dans le gestionnaire d'URL de votre application. Lorsque vous appelez l'CompleteResourceTokenAuthAPI, votre application doit présenter le jeton ou lauser_idchaîne OAuth du fournisseur d'identité entrant d'origine qui a été utilisé pour générer le jeton d'accès à la charge de travail afin de représenter l'utilisateur et l'application agent impliqués dans le flux d'autorisation OAuth 2.0. Ces informations doivent être extraites de la session d'application active sur le navigateur de l'utilisateur (généralement via un cookie de navigateur ou dans le stockage local du navigateur) et NE DOIVENT PAS être extraites du cache d'une session distante.En outre, chaque URL d'autorisation générée par AgentCore Identity est identifiée de manière unique par son propre URI de session. Cet URI de session doit également être présenté à côté de l'identifiant de l'utilisateur pour lier la session à l'utilisateur prévu.
Important
Avant que votre application n'appelle l'
CompleteResourceTokenAuthAPI, celle-ci doit vérifier que l'utilisateur actuel dispose d'une session active et valide avec votre application. Ce faisant, votre application peut associer l'utilisateur prévu à la session d'autorisation. En outre, si votre application dépend d'un service principal, vous pouvez déplacer le code qui appelle l'CompleteResourceTokenAuthAPI vers votre backend et demander à votre application de transférer le jeton OAuth du fournisseur d'identité entrant ou vers votre backend.user_idExemple de code d'application :
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"}) -
Test : une fois la configuration terminée, vous êtes prêt à tester l'intégration. Commencez par appeler
GetResourceOauth2Tokenet accédez à l'URL d'autorisation renvoyée dans votre navigateur. Après avoir effectué l'autorisation auprès du fournisseur de ressources OAuth 2.0, le navigateur devrait être redirigé vers l'URL de votre application et invoquer l'CompleteResourceTokenAuthAPI. Une fois que l'application aura renvoyé une réponse valide, votre application agent pourra récupérer les jetons d'accès OAuth 2.0 initialement demandés pour l'utilisateur. Ces jetons peuvent être récupérés en appelant l'GetResourceOauth2TokenAPI.
Considérations supplémentaires
Lorsque vous implémentez la liaison de session par URL d'autorisation OAuth 2.0, tenez compte des considérations suivantes :
-
Chaque URL d'autorisation et son identifiant de session correspondant ne sont valides que pendant 10 minutes.
-
Pour sécuriser le point de terminaison de votre application contre les attaques CSRF, nous vous recommandons vivement de générer un état opaque à inclure dans votre appel d'API à.
GetResourceOAuth2TokenVotre application doit être capable d'analyser cette valeur pour s'assurer qu'elle répond aux demandes initiées par votre application d'agent.