OAuth 2.0-Autorisierungs-URL-Sitzungsbindung
AgentCore Identity ermöglicht das Abrufen von OAuth 2.0-Zugriffstoken für Ihre Agentenanwendungen, um auf Anwendungen von Drittanbietern oder Ressourcen zuzugreifen, die durch Identitätsanbieter/Autorisierungsserver geschützt sind. Wenn eine Anwendung oder Ressource erfordert, dass ein Benutzer sich explizit mit einem OAuth-Autorisierungscode autorisiert, generiert AgentCore Identity eine Autorisierungs-URL, zu der der Benutzer navigieren und dem Zugriff zustimmen kann. Sobald der Benutzer seine Zustimmung erteilt, ruft AgentCore Identity das Zugriffstoken im Namen der Benutzer von der Anwendung oder Ressource ab und speichert es im AgentCore Identity Token Vault.
Da ein Benutzer jedoch versehentlich die Autorisierungs-URL an einen anderen Benutzer senden und Zugriff auf die Anwendung oder Ressource dieses Benutzers erhalten kann, muss Ihre Anwendung überprüfen, ob der Benutzer, der eine Autorisierungsanfrage initiiert, immer noch derselbe ist, der der Anwendung oder Ressource seine Zustimmung erteilt hat. Dazu müssen Sie einen öffentlich zugänglichen HTTPS-Anwendungsendpunkt bei AgentCore Identity registrieren, der die Benutzerverifizierung durchführt.
Wie funktioniert die Sitzungsbindung
Das folgende Flussdiagramm und die entsprechenden Schritte zeigen den Prozess der OAuth 2.0-Autorisierungs-URL-Sitzung:
-
Agent aufrufen — Ihr Agentencode ruft die
GetResourceOauth2TokenAPI auf, um eine Autorisierungs-URL abzurufen, wenn ein Benutzer, der den Agenten ursprünglich verwendet, auf eine Anwendung oder Ressource zugreifen möchte, die ihm gehört. he/she -
Autorisierungs-URL generieren — AgentCore Identity generiert eine Autorisierungs-URL und eine Sitzungs-URI, zu der der Benutzer navigieren und dem Zugriff zustimmen kann.
-
Zugriffstoken autorisieren und abrufen — Der Benutzer navigiert zur Autorisierungs-URL und erteilt Ihrem Agenten die Zustimmung zum Zugriff auf his/her die Ressource. Danach leitet AgentCore Identity den Browser des Benutzers mit Informationen über den ursprünglichen Benutzer der Autorisierungsanfrage an Ihren HTTPS-Anwendungsendpunkt weiter. Zu diesem Zeitpunkt bestimmt Ihr HTTPS-Anwendungsendpunkt, ob der ursprüngliche Agent-Benutzer immer noch derselbe ist wie der aktuell angemeldete Benutzer Ihrer Anwendung. Wenn sie übereinstimmen, wird Ihr Anwendungsendpunkt aufgerufen,
CompleteResourceTokenAuthsodass AgentCore Identity das Zugriffstoken abrufen und speichern kann. -
Re-invoke Agent zum Abrufen des Zugriffstokens — Sobald die Anwendung eine gültige Antwort zurückgibt, kann Ihre Agentenanwendung die OAuth2.0 Zugriffstoken abrufen, die ursprünglich für den Benutzer angefordert wurden. Wenn die Benutzer nicht übereinstimmen, unternimmt Ihre Anwendung einfach nichts oder protokolliert den Versuch.
Identity ermöglicht es Ihrem Anwendungsendpunkt, die Benutzeridentität zu überprüfen, AgentCore sodass Ihre Agentenanwendung sicherstellen kann, dass es sich immer um denselben Benutzer handelt, der die Autorisierungsanfrage initiiert hat, und derjenige, der dem Zugriff zugestimmt hat.
Implementierungsinformationen
Die folgenden Schritte führen Sie durch die Einrichtung der Workload-Identität, des OAuth 2.0-Anmeldeinformationsanbieters und des OAuth 2.0-Anwendungsclients vom Ressourcenanbieter, um ein OAuth 2.0-Zugriffstoken für Ihre Agentenanwendung abzurufen.
Wichtig
Wenn Sie die AgentCore CLI agentcore dev in einer lokalen Umgebung verwenden, hostet die CLI zur Vereinfachung Ihrer lokalen Entwicklung und Tests den Callback-Endpunkt und ruft die CompleteResourceTokenAuth API in Ihrem Namen auf, um die Benutzersitzung zu überprüfen, um OAuth 2.0-Zugriffstoken zu erhalten, sodass Sie die Schritte 1, 2 und 4 im folgenden Setup überspringen können. Wenn Sie Ihren Agentencode in AgentCore Runtime bereitstellen, muss Ihre Webanwendung, die eine Verbindung zur Agentenlaufzeit herstellt, jedoch selbst einen öffentlich zugänglichen HTTPS-Callback-Endpunkt hosten. Der Callback-Endpunkt muss UpdateWorkloadIdentity anhand der Workload-Identität registriert werden, AllowedResourceOAuth2ReturnUrl indem er mit der von AgentCore Runtime bereitgestellten Agenten-ID aufruft, und dann die CompleteResourceTokenAuth API aufrufen, nachdem die Browsersitzung des aktuellen Benutzers überprüft wurde, um Ihre OAuth 2.0-Autorisierungsabläufe zu sichern.
Um die URL-Sitzungsbindung für die OAuth 2.0-Autorisierung zu implementieren
-
Erstellen Sie eine Anwendungs-URL — Erstellen und hosten Sie für Ihre benutzerorientierte Browseranwendung eine neue URL, auf die über den Benutzerbrowser zugegriffen werden kann und Anfragen von Browserumleitungen annehmen kann. Diese Seite sollte entweder zu einer Anwendungsseite weiterleiten, auf der Ihr Benutzer seine Agentensitzung fortsetzen kann, ODER eine einfache Webseite rendern, auf der Ihre Benutzer angewiesen werden, zu ihrer derzeit aktiven Agentensitzung zurückzukehren. In späteren Phasen der Implementierung wird diese Seite zur Überprüfung der aktiven Sitzung des aktuellen Benutzers verwendet. Daher sollte diese Seite auch Zugriff auf die Sitzungsdaten Ihres Anwendungsbenutzers haben und diese verwalten können.
Beispielsweise können die Benutzer Ihrer Anwendung auf einer primären Anwendungsseite mit einem Agenten interagieren lassen,
https://myagentapp.com/assistantz. Sie sollten vorerst eine solche neue URL veröffentlichenhttps://myagentapp.com/callback, die zur primären Anwendungsseite weiterleitet. Die tatsächliche Codelogik in Ihrem/callbackEndpunkt wird später aktualisiert, wenn Sie dieser Anleitung folgen. -
Workload-Identität mit Anwendungs-URL aktualisieren — (Kann übersprungen werden, wenn Sie lokal über AgentCore CLI testen) Nachdem Sie eine Anwendungs-URL erstellt und gehostet haben, zu der AgentCore Identity weitergeleitet werden soll, aktualisieren Sie Ihre Workload-Identität, sodass die Anwendungs-URL als
AllowedResourceOauth2ReturnUrlregistriert ist. Stellen Sie sicher, dass die verwendeten IAM-Anmeldeinformationen über Aufrufberechtigungen verfügenCreateWorkloadIdentityoder davonUpdateWorkloadIdentityabhängen, ob Sie eine neue Workload-Identität erstellen oder eine bestehende aktualisieren.Anmerkung
Bei Workload-Identitäten, die in Ihrem Namen von AgentCore Runtime oder Gateway erstellt wurden, entspricht der Name der Workload-Identität der Runtime-ID oder Gateway-ID, die von den Services ausgegeben wird.
Beispiel für einen
UpdateWorkloadIdentityAPI-Aufruf:aws bedrock-agentcore-control update-workload-identity --name GoogleCalendarAgent \ --allowed-resource-oauth2-return-urls https://myagentapp.com/callback -
OAuth 2.0-Anmeldeinformationsanbieter in AgentCore Identity erstellen — Um den OAuth 2.0-Anmeldeinformationsanbieter vollständig zu registrieren, benötigen Sie Berechtigungen zum Aufrufen von und.
CreateOauth2CredentialProviderUpdateOauth2CredentialProviderDazu gehen Sie wie folgt vor:-
Rufen Sie
CreateOauth2CredentialProvidermit Platzhaltern für Client-ID und Client-Geheimnis auf. -
Die API-Antwort wird eine OAuth-Callback-URL (Umleitung) wie folgt enthalten:
https://bedrock-agentcore.amazonaws.com/identities/callback/123-456-7890Notieren Sie sich diesen Wert, da er für jeden Anbieter spezifisch ist, der erstellt wird und später vom OAuth 2.0-Ressourcenanbieter benötigt wird.
-
Gehen Sie zu Ihrem Ressourcenanbieter (z. B. Google oder GitHub) und erstellen Sie einen OAuth 2.0-Anwendungsclient. Geben Sie die vom Dienst beim
CreateOauth2CredentialProviderAufruf an den Ressourcenanbieter ausgegebene Rückruf-URL als zulässige OAuth 2.0-Callback-URL an. -
Sobald der OAuth 2.0-Anwendungsclient erstellt wurde, notieren Sie sich die Client-ID und das Client-Geheimnis, die Ihrem App-Client zugewiesen wurden, da Sie den OAuth 2.0-Anmeldeinformationsanbieter mit diesen Werten aktualisieren müssen.
-
Rufen Sie
UpdateOauth2CredentialProviderdie vom Ressourcenanbieter bereitgestellte Client-ID und das Client-Geheimnis auf und geben Sie sie an. Dabei werden die Platzhalterwerte ersetzt, die bei der Erstellung des Anmeldeinformationsanbieters angegeben wurden.
-
-
Code-Handler für Aufrufe hinzufügen CompleteResourceTokenAuth — Nachdem Sie Ihren OAuth 2.0-Anbieter für Anmeldeinformationen erstellt haben, fügen Sie Code und die IAM-Berechtigungen zum Aufrufen der
CompleteResourceTokenAuthAPI in Ihrem Anwendungs-URL-Handler hinzu. Wenn Sie dieCompleteResourceTokenAuthAPI aufrufen, muss Ihre Anwendung das ursprüngliche OAuth-Token oder dieuser_idZeichenfolge des Inbound-Identity-Providers vorlegen, das zur Generierung des Workload-Zugriffstokens verwendet wurde, um den Benutzer und die Agentenanwendung darzustellen, die am OAuth 2.0-Autorisierungsablauf beteiligt sind. Diese Informationen sollten aus der aktiven Anwendungssitzung im Browser des Benutzers abgerufen werden (normalerweise über ein Browser-Cookie oder im lokalen Speicher des Browsers) und NICHT aus einem Remote-Sitzungscache abgerufen werden.Darüber hinaus wird jede Autorisierungs-URL, die von AgentCore Identity generiert wird, mit ihrer eigenen Sitzungs-URI eindeutig identifiziert. Dieser Sitzungs-URI muss auch zusammen mit der Benutzerkennung angegeben werden, um die Sitzung mit dem vorgesehenen Benutzer zu verknüpfen.
Wichtig
Bevor Ihre Anwendung die
CompleteResourceTokenAuthAPI aufruft, muss Ihre Anwendung überprüfen, ob der aktuelle Benutzer eine aktive, gültige Sitzung mit Ihrer Anwendung hat. Auf diese Weise kann Ihre Anwendung den beabsichtigten Benutzer mit der Autorisierungssitzung verknüpfen. Wenn Sie über einen Back-End-Dienst verfügen, von dem Ihre Anwendung abhängt, können Sie außerdem den Code, der dieCompleteResourceTokenAuthAPI aufruft, in Ihr Backend verschieben und Ihre Anwendung das OAuth-Token des eingehenden Identitätsanbieters oder an Ihr Backend weiterleiten lassen.user_idBeispiel für einen Anwendungscode:
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 — Sobald Sie das Setup abgeschlossen haben, können Sie die Integration testen. Rufen Sie zunächst an
GetResourceOauth2Tokenund rufen Sie in Ihrem Browser die Autorisierungs-URL auf, die zurückgegeben wird. Nach Abschluss der Autorisierung beim OAuth 2.0-Ressourcenanbieter sollte der Browser zurück zu Ihrer Anwendungs-URL weiterleiten und die API aufrufen.CompleteResourceTokenAuthSobald die Anwendung eine gültige Antwort zurückgibt, kann Ihre Agentenanwendung die OAuth 2.0-Zugriffstoken abrufen, die ursprünglich für den Benutzer angefordert wurden. Diese Token können durch Aufrufen der API abgerufen werden.GetResourceOauth2Token
Weitere Überlegungen
Beachten Sie bei der Implementierung der OAuth 2.0-Autorisierungs-URL-Sitzungsbindung die folgenden Überlegungen:
-
Jede Autorisierungs-URL und die zugehörige Sitzungs-ID sind nur für 10 Minuten gültig.
-
Um Ihren Anwendungs-Callback-Endpunkt vor CSRF-Angriffen zu schützen, empfehlen wir Ihnen dringend, einen undurchsichtigen Status zu generieren, den Sie in Ihren API-Aufruf aufnehmen können.
GetResourceOAuth2TokenIhre Anwendung sollte in der Lage sein, diesen Wert zu analysieren, um sicherzustellen, dass sie Anfragen bearbeitet, die von Ihrer Agentenanwendung initiiert wurden.