View a markdown version of this page

Ottieni il token di accesso OAuth 2.0 - Fondamento Amazon AgentCore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Ottieni il token di accesso OAuth 2.0

AgentCore L'identità consente agli sviluppatori di ottenere token OAuth per l'accesso delegato dall'utente o per l'autenticazione da macchina a macchina in base ai provider di credenziali OAuth 2.0 configurati. Il servizio orchestrerà il processo di autenticazione tra l'utente o l'applicazione e il server di autorizzazione a valle e recupererà e memorizzerà il token risultante. Una volta che il token è disponibile nell' AgentCore Identity vault, gli agenti autorizzati possono recuperarlo e utilizzarlo per autorizzare le chiamate ai server di risorse. Ad esempio, il codice di esempio riportato di seguito recupererà un token per interagire con Google Drive per conto di un utente finale. Per ulteriori informazioni, consulta Integrazione con Google Drive utilizzando OAuth2 per l'esempio completo.

# Injects Google Access Token @requires_access_token( # Uses the same credential provider name created above provider_name= "google-provider", # Requires Google OAuth2 scope to access Google Drive scopes= ["https://www.googleapis.com/auth/drive.metadata.readonly"], # Sets to OAuth 2.0 Authorization Code flow auth_flow= "USER_FEDERATION", # Prints authorization URL to console on_auth_url= lambda x: print("\nPlease copy and paste this URL in your browser:\n" + x), # If false, caches obtained access token force_authentication= False, callback_url='insert_oauth2_callback_url_for_session_binding', ) async def write_to_google_drive(*, access_token: str): # Use the token to call Google Drive pass # To invoke: # asyncio.run(write_to_google_drive())

Il processo è simile all'ottenimento di un token per le chiamate da macchina a macchina, come mostrato nell'esempio seguente:

import asyncio from bedrock_agentcore.identity.auth import requires_access_token, requires_api_key @requires_access_token( provider_name= "my-api-key-provider", # replace with your own credential provider name scopes= [], auth_flow= 'M2M', ) async def need_token_2LO_async(*, access_token: str): # Use the access token pass # To invoke: # asyncio.run(need_token_2LO_async())

Archiviazione e utilizzo automatici dei token di aggiornamento

AgentCore archivia e utilizza automaticamente i token di aggiornamento quando disponibili presso i provider OAuth2, riducendo la frequenza delle richieste di riautorizzazione degli utenti. Quando gli utenti inizialmente concedono il consenso tramite un flusso di codice di autorizzazione OAuth2 standard, il sistema memorizza sia i token di accesso che i token di aggiornamento (se forniti) nell'archivio sicuro dei token. Ciò consente agli agenti di ottenere automaticamente nuovi token di accesso alla scadenza dei token originali, migliorando l'esperienza dell'utente riducendo al minimo le richieste di consenso ripetute.

Importante

La validità dei token di accesso AgentCore restituiti da non è garantita. I token possono essere revocati dai clienti del fornitore federato, che non sono in grado di rilevarli. AgentCore Se un token non è valido, utilizzalo forceAuthentication: true per forzare un nuovo flusso di autenticazione e ottenere un token di accesso valido.

I token di aggiornamento hanno in genere una durata più lunga rispetto ai token di accesso, con un periodo di validità predefinito di circa 30 giorni rispetto alla durata più breve dei token di accesso (spesso 1-2 ore). Quando un token di accesso scade, utilizza AgentCore automaticamente il token di aggiornamento archiviato per richiedere un nuovo token di accesso al provider. Se viene archiviato un token di aggiornamento valido, AgentCore salta il flusso di federazione degli utenti e restituisce direttamente un nuovo token di accesso. Se anche il token di aggiornamento è scaduto o non è valido, il sistema richiede nuovamente all'utente la riautorizzazione completa.

Questa funzionalità non richiede alcuna configurazione interna AgentCore : funziona automaticamente quando i token di aggiornamento sono presenti nella risposta del token del provider OAuth2. Tuttavia, è necessario configurare il provider OAuth2 per includere i token di aggiornamento nel flusso di autorizzazione. La configurazione specifica dipende dal tuo provider:

Provider Configurazione richiesta

Google

access_type=offlineIncludi customParameters quando chiami GetResourceOauth2Token

"customParameters": { "access_type": "offline" }

Microsoft

offline_accessIncludi nel scopes parametro durante la chiamata GetResourceOauth2Token

"scopes": ["openid", "profile", "offline_access"]

Salesforce

refresh_tokenIncludi nel scopes parametro durante la chiamata GetResourceOauth2Token

"scopes": ["api", "refresh_token"]

Atlassian

offline_accessIncludi nel scopes parametro durante la chiamata GetResourceOauth2Token

"scopes": ["read:jira-user", "offline_access"]

GitHub

Non è richiesta alcuna AgentCore configurazione aggiuntiva. Abilita la funzione di scadenza del User-to-server token nelle impostazioni GitHub dell'app. I token di aggiornamento vengono archiviati automaticamente quando questa funzione è abilitata.

Slack

Non è richiesta alcuna AgentCore configurazione aggiuntiva. Abilita la funzione «rotazione dei token» nelle impostazioni dell'app Slack. I token di aggiornamento vengono restituiti automaticamente quando questa funzione è abilitata.

LinkedIn

Non è richiesta alcuna AgentCore configurazione aggiuntiva. Abilita le impostazioni dei token di aggiornamento nella configurazione LinkedIn dell'app.

Altri provider

Alcuni provider richiedono una configurazione nelle impostazioni del provider anziché nei parametri API. Consulta la documentazione del tuo provider per i requisiti dei token di aggiornamento.

Se il tuo provider supporta i token di aggiornamento ed è configurato correttamente, li AgentCore memorizzerà e li gestirà automaticamente senza ulteriori configurazioni. Per cancellare i token di aggiornamento archiviati e forzare gli utenti a riautenticarsi, impostalo al momento della chiamata. forceAuthentication=true GetResourceOauth2Token Questo cancella il token di aggiornamento e impone un flusso federativo completo. Per informazioni sulla configurazione dei provider OAuth2, consulta Configurazione e configurazione del provider.

Streaming degli URL di autorizzazione ai chiamanti dell'applicazione

Per i flussi OAuth (3LO) a tre fasi, l'agente deve fornire l'URL di autorizzazione all'applicazione chiamante in modo che gli utenti possano completare il flusso di consenso. Sebbene gli esempi precedenti mostrino la stampa dell'URL sulla console, le applicazioni di produzione richiedono lo streaming dell'URL al chiamante tramite il meccanismo di risposta dell'applicazione.

Schemi di implementazione comuni

Modello di risposta in streaming: per le applicazioni che supportano le risposte in streaming, puoi inviare l'URL di autorizzazione come parte del flusso di risposta:

import asyncio from bedrock_agentcore.identity.auth import requires_access_token @requires_access_token( provider_name="google-provider", scopes=["https://www.googleapis.com/auth/drive.metadata.readonly"], auth_flow="USER_FEDERATION", # Stream URL back to caller instead of printing on_auth_url=lambda url: stream_to_caller({ "type": "authorization_required", "authorization_url": url, "message": "Please visit this URL to authorize access" }), force_authentication=False, callback_url='insert_oauth2_callback_url_for_session_binding' ) async def agent_with_streaming_auth(*, access_token: str): # Agent logic continues after user completes authorization return {"status": "success", "token_received": True} def stream_to_caller(data): # Implementation depends on your streaming mechanism # Examples: WebSocket, Server-Sent Events, HTTP chunked response response_stream.send(json.dumps(data))

Pattern di callback: per le applicazioni che utilizzano callback o webhook, memorizza l'URL di autorizzazione e invia una notifica al chiamante:

import asyncio from bedrock_agentcore.identity.auth import requires_access_token @requires_access_token( provider_name="google-provider", scopes=["https://www.googleapis.com/auth/drive.metadata.readonly"], auth_flow="USER_FEDERATION", # Store URL and trigger callback on_auth_url=lambda url: handle_auth_callback(url), force_authentication=False, callback_url='insert_oauth2_callback_url_for_session_binding' ) async def agent_with_callback_auth(*, access_token: str): return {"status": "success", "data": "processed"} def handle_auth_callback(authorization_url): # Store the URL associated with the request auth_store.save(request_id, { "authorization_url": authorization_url, "status": "pending_authorization" }) # Notify the calling application callback_service.notify(callback_url, { "request_id": request_id, "authorization_url": authorization_url, "action_required": "user_authorization" })

Schema di polling: per le applicazioni che preferiscono il polling, memorizza l'URL di autorizzazione in una posizione recuperabile:

import asyncio from bedrock_agentcore.identity.auth import requires_access_token @requires_access_token( provider_name="google-provider", scopes=["https://www.googleapis.com/auth/drive.metadata.readonly"], auth_flow="USER_FEDERATION", # Store URL for polling retrieval on_auth_url=lambda url: store_auth_url_for_polling(url), force_authentication=False, callback_url='insert_oauth2_callback_url_for_session_binding' ) async def agent_with_polling_auth(*, access_token: str): return {"status": "success", "data": "processed"} def store_auth_url_for_polling(authorization_url): # Store in database, cache, or session store session_store.set(f"auth_url:{session_id}", { "authorization_url": authorization_url, "created_at": datetime.utcnow(), "status": "pending" }, ttl=300) # 5 minute expiration

Scegliete il modello che meglio si adatta all'architettura della vostra applicazione. Le risposte in streaming offrono la migliore esperienza utente per le applicazioni in tempo reale, mentre i pattern di callback e polling funzionano bene per scenari di elaborazione asincrona o in batch.

Indicatori di risorse nei flussi OAuth2 AgentCore

Gli indicatori di risorse forniscono un modo standardizzato per specificare quale server di risorse deve accettare un token di accesso OAuth2. AgentCore utilizza Cognito come provider di autenticazione, che supporta indicatori di risorse conformi a RFC 8707 che consentono di specificare il server di risorse previsto durante le richieste di token. Per utilizzare gli indicatori di risorse, devi prima configurare il server di autorizzazione in modo che riconosca server di risorse specifici utilizzando l'API di Cognito. CreateResourceServer Una volta configurato, quando specifichi un indicatore di risorsa nella richiesta di token, Cognito include il corrispondente identificatore del server di risorse nella dichiarazione aud del token risultante, consentendo al server di risorse di verificare che il token sia destinato al suo uso specifico. Ciò offre diversi importanti vantaggi: i server di risorse possono convalidare che i token sono specificamente destinati a loro (principio del privilegio minimo), una migliore verificabilità identificando chiaramente a quale server di risorse è destinato ciascun token e una riduzione del rischio di uso improprio dei token tra diversi servizi all'interno dell'ambiente applicativo.

Tramite l'implementazione RFC 8707 di Cognito, AgentCore consente ai clienti di specificare un server di risorse direttamente nelle richieste di autorizzazione e token, sovrascrivendo il parametro di pubblico predefinito. In Cognito, l' "indicatore di risorsa» a cui si fa riferimento nella RFC corrisponde al valore di «identificatore». ResourceServer Gli indicatori di risorse sono particolarmente importanti per le implementazioni del Model Context Protocol (MCP), dove aiutano a mitigare i rischi di sicurezza specifici delineati nelle specifiche di autorizzazione MCP. L'indicatore di risorsa corrisponde al parametro di risorsa RFC 9728, garantendo il corretto ambito dei token per le interazioni con i server MCP. Nota che l'implementazione corrente supporta l'associazione di una singola risorsa, il che significa che puoi specificare un server di risorse per richiesta di token.

Utilizza gli indicatori delle risorse quando i tuoi agenti devono accedere a server di risorse con requisiti di sicurezza specifici o quando hai bisogno di un controllo dettagliato sulla convalida dell'audience dei token. Gli indicatori delle risorse sono particolarmente utili per le applicazioni multi-tenant in cui i token devono essere limitati a risorse specifiche dei clienti.