View a markdown version of this page

Associazione della sessione URL di autorizzazione OAuth 2.0 - Amazon Bedrock AgentCore

Associazione della sessione URL di autorizzazione OAuth 2.0

AgentCore Identity fornisce il recupero dei token di accesso OAuth 2.0 per le applicazioni degli agenti per accedere a fornitori di applicazioni o risorse di terze parti protette da provider di identità o server di autorizzazione. Se un'applicazione o una risorsa richiede che un utente si autorizzi esplicitamente con un flusso di codice di autorizzazione OAuth, AgentCore Identity genera un URL di autorizzazione a cui l'utente può accedere e consentire l'accesso. Quindi, dopo aver dato il consenso dell'utente, AgentCore Identity recupera il token di accesso dall'applicazione o dalla risorsa per conto degli utenti e lo archivia nell'Identity Token Vault. AgentCore

Tuttavia, poiché un utente può inviare accidentalmente l'URL di autorizzazione a un altro utente e ottenere l'accesso all'applicazione o alla risorsa di quell'utente, l'applicazione deve verificare che l'utente che avvia una richiesta di autorizzazione sia sempre lo stesso utente che ha concesso il consenso all'applicazione o alla risorsa. A tale scopo, è necessario registrare un endpoint dell'applicazione HTTPS disponibile pubblicamente con AgentCore Identity che gestisca la verifica dell'utente.

Come funziona l'associazione delle sessioni

Il seguente diagramma di flusso e i passaggi corrispondenti mostrano il processo di associazione della sessione dell'URL di autorizzazione OAuth 2.0:

Diagramma di flusso per l'associazione della sessione con URL di autorizzazione OAuth 2.0
  1. Invoke agent: il codice dell'agente richiama l'GetResourceOauth2TokenAPI per recuperare un URL di autorizzazione, quando un utente dell'agente di origine desidera accedere a un'applicazione o a una risorsa di cui è proprietaria. he/she

  2. Genera URL di autorizzazione: AgentCore Identity genera un URL di autorizzazione e un URI di sessione a cui l'utente può accedere e consentire l'accesso.

  3. Autorizza e ottieni il token di accesso: l'utente accede all'URL di autorizzazione e concede il consenso all'agente per accedere alla risorsa. his/her Successivamente, AgentCore Identity reindirizza il browser dell'utente all'endpoint dell'applicazione HTTPS con le informazioni contenenti l'utente di origine della richiesta di autorizzazione. A questo punto, l'endpoint dell'applicazione HTTPS determina se l'utente dell'agente di origine è ancora lo stesso dell'utente attualmente connesso all'applicazione. Se corrispondono, l'endpoint dell'applicazione viene richiamato in CompleteResourceTokenAuth modo che AgentCore Identity possa recuperare e archiviare il token di accesso.

  4. Re-invoke agente per ottenere il token di accesso: una volta che l'applicazione restituisce una risposta valida, l'applicazione agente sarà in grado di recuperare i token di OAuth2.0 accesso originariamente richiesti per l'utente. Se gli utenti non corrispondono, l'applicazione semplicemente non fa nulla o registra il tentativo.

Consentendo all'endpoint dell'applicazione di verificare l'identità dell'utente, AgentCore Identity consente all'applicazione agente di garantire che sia sempre lo stesso utente che ha avviato la richiesta di autorizzazione e quello che ha acconsentito all'accesso.

Dettagli di implementazione

I passaggi seguenti illustrano la configurazione dell'identità del carico di lavoro, del provider di credenziali OAuth 2.0 e del client dell'applicazione OAuth 2.0 dal provider di risorse per recuperare un token di accesso OAuth 2.0 per l'applicazione agente.

È possibile fare riferimento al codice di esempio come esempio di applicazione funzionante: implementazione del server di callback OAuth 2.0.

Importante

Quando utilizzi la AgentCore CLI agentcore dev in un ambiente locale, per semplificare lo sviluppo e i test locali, la CLI ospita l'endpoint di callback e chiama l'CompleteResourceTokenAuthAPI per tuo conto per verificare la sessione utente per ottenere i token di accesso OAuth 2.0 in modo da poter saltare i passaggi 1, 2 e 4 nella configurazione seguente. Tuttavia, quando si distribuisce il codice agente su AgentCore Runtime, l'applicazione Web che si connette al runtime dell'agente deve ospitare un endpoint di callback HTTPS accessibile al pubblico, l'endpoint di callback deve essere registrato nell'identità del carico di lavoro come e AllowedResourceOAuth2ReturnUrl chiamando UpdateWorkloadIdentity utilizzando l'ID agente fornito da AgentCore Runtime, quindi chiamare l'CompleteResourceTokenAuthAPI dopo aver verificato la sessione del browser dell'utente corrente per proteggere i flussi di autorizzazione OAuth 2.0.

Per implementare l'associazione della sessione URL di autorizzazione OAuth 2.0

  1. Crea un URL per l'applicazione browser rivolta all'utente, crea e ospita un nuovo URL accessibile dal browser utente e in grado di accettare richieste provenienti dai reindirizzamenti del browser. Questa pagina dovrebbe reindirizzare a una pagina dell'applicazione in cui l'utente può continuare con la sessione dell'agente OPPURE visualizzare una pagina Web di base che indichi agli utenti di restituire la sessione agente attualmente attiva. Nelle fasi successive dell'implementazione, questa pagina viene utilizzata per la convalida della sessione attiva dell'utente corrente, quindi dovrebbe anche essere in grado di accedere e gestire i dati della sessione utente dell'applicazione.

    Ad esempio, è possibile che gli utenti dell'applicazione interagiscano con un agente in una pagina principale dell'applicazione, ad esempiohttps://myagentapp.com/assistant. Ti consigliamo di esporre un nuovo URL come https://myagentapp.com/callback quello, per ora verrà reindirizzato alla pagina principale dell'applicazione. L'effettiva logica del codice nel tuo /callback endpoint verrà aggiornata in seguito, seguendo questa guida.

  2. Aggiorna l'identità del carico di lavoro con l'URL dell'applicazione: (può essere ignorato se il test viene eseguito localmente tramite AgentCore CLI) Dopo aver creato e ospitato un URL dell'applicazione a cui reindirizzare AgentCore Identity, aggiorna l'identità del carico di lavoro in modo che l'URL dell'applicazione sia registrato come. AllowedResourceOauth2ReturnUrl Assicurati che le credenziali IAM utilizzate dispongano delle autorizzazioni per la chiamata CreateWorkloadIdentity o a UpdateWorkloadIdentity seconda che tu stia creando una nuova identità per il carico di lavoro o aggiornandone una esistente.

    Nota

    Per le identità dei carichi di lavoro create per tuo conto da AgentCore Runtime o Gateway, il nome dell'identità del carico di lavoro corrisponderà all'ID di runtime o all'ID gateway rilasciato dai servizi.

    Esempio di chiamata APIUpdateWorkloadIdentity:

    aws bedrock-agentcore-control update-workload-identity --name GoogleCalendarAgent \ --allowed-resource-oauth2-return-urls https://myagentapp.com/callback
  3. Crea un provider di credenziali OAuth 2.0 in AgentCore Identity: per registrare completamente il provider di credenziali OAuth 2.0, sono necessarie le autorizzazioni per chiamare e. CreateOauth2CredentialProvider UpdateOauth2CredentialProvider Completare la procedura riportata di seguito.

    • Chiama CreateOauth2CredentialProvider con segnaposti per l'ID cliente e il segreto del cliente.

    • La risposta dell'API conterrà un URL di callback (reindirizzamento) OAuth come: https://bedrock-agentcore.amazonaws.com/identities/callback/123-456-7890

      Registra questo valore in quanto è specifico per ogni provider creato e sarà necessario in seguito per il provider di risorse OAuth 2.0.

    • Vai al tuo fornitore di risorse (ad esempio Google o GitHub) e crea un client applicativo OAuth 2.0. Fornisci l'URL di callback emesso dal servizio dalla CreateOauth2CredentialProvider chiamata al provider di risorse come URL di callback OAuth 2.0 consentito.

    • Una volta creato il client dell'applicazione OAuth 2.0, registra l'ID client e il segreto del client assegnati al client dell'app poiché è necessario aggiornare il provider di credenziali OAuth 2.0 con questi valori.

    • Chiamate UpdateOauth2CredentialProvider e fornite l'ID client e il client secret forniti dal provider di risorse, sostituendo i valori segnaposto forniti durante la creazione del provider di credenziali.

  4. Aggiungi un gestore di codice per le chiamate CompleteResourceTokenAuth: dopo aver creato il provider di credenziali OAuth 2.0, aggiungi il codice e le autorizzazioni IAM per chiamare l'API nel gestore degli URL dell'applicazione. CompleteResourceTokenAuth Quando si chiama l'CompleteResourceTokenAuthAPI, l'applicazione deve presentare il token o la user_id stringa OAuth originale del provider di identità in entrata utilizzato per generare il token di accesso al carico di lavoro per rappresentare l'utente e l'applicazione agente coinvolti nel flusso di autorizzazione OAuth 2.0. Queste informazioni devono essere recuperate dalla sessione attiva dell'applicazione sul browser dell'utente (in genere tramite un cookie del browser o nella memoria locale del browser) e NON devono essere estratte dalla cache della sessione remota.

    Inoltre, ogni URL di autorizzazione generato da AgentCore Identity viene identificato in modo univoco con il proprio URI di sessione. Questo URI di sessione deve inoltre essere presentato insieme all'identificatore utente per associare la sessione all'utente previsto.

    Importante

    Prima che l'applicazione chiami l'CompleteResourceTokenAuthAPI, l'applicazione deve verificare che l'utente corrente abbia una sessione attiva e valida con l'applicazione. In questo modo l'applicazione può associare l'utente previsto alla sessione di autorizzazione. Inoltre, se disponete di un servizio di backend da cui dipende l'applicazione, potete spostare il codice che chiama l'CompleteResourceTokenAuthAPI sul backend e fare in modo che l'applicazione inoltri il token OAuth del provider di identità in entrata o al backend. user_id

    Codice applicativo di esempio:

    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"})
  5. Test: una volta completata la configurazione, sei pronto per testare l'integrazione. Inizia chiamando GetResourceOauth2Token e nel tuo browser vai all'URL di autorizzazione che viene restituito. Dopo aver completato l'autorizzazione presso il provider di risorse OAuth 2.0, dovresti vedere il browser reindirizzare nuovamente all'URL dell'applicazione e richiamare l'API. CompleteResourceTokenAuth Una volta che l'applicazione restituisce una risposta valida, l'applicazione agente sarà in grado di recuperare i token di accesso OAuth 2.0 originariamente richiesti per l'utente. Questi token possono essere recuperati chiamando l'API. GetResourceOauth2Token

Ulteriori considerazioni

Quando implementi l'associazione della sessione URL di autorizzazione OAuth 2.0, tieni presente le seguenti considerazioni:

  • Ogni URL di autorizzazione e il corrispondente identificatore di sessione sono validi solo per 10 minuti.

  • Per proteggere l'endpoint di callback dell'applicazione dagli attacchi CSRF, consigliamo vivamente di generare uno stato opaco da includere nella chiamata API a cui inviare. GetResourceOAuth2Token L'applicazione dovrebbe essere in grado di analizzare questo valore per garantire che serva le richieste avviate dall'applicazione agente.