View a markdown version of this page

On-behalf-of échange de jetons avec AgentCore Identity - Amazon Bedrock AgentCore

On-behalf-of échange de jetons avec AgentCore Identity

Amazon Bedrock AgentCore Identity prend en charge l'échange de jetons On-Behalf-Of (OBO), ce qui permet aux agents et aux autres charges de travail, telles que les serveurs MCP, d'échanger un jeton d'accès utilisateur entrant contre un nouveau jeton d'accès délimité qui cible un serveur de ressources en aval. Comme l'échange convertit un jeton émis pour un public directement en un jeton destiné à un autre public en aval, vos agents peuvent accéder à des ressources protégées pour le compte d'utilisateurs authentifiés sans déclencher de flux de consentement supplémentaires. Le jeton échangé porte à la fois l'identité de l'agent et celle de l'appelant d'origine, ce qui donne aux serveurs de ressources les signaux dont ils ont besoin pour appliquer une autorisation précise et zéro confiance à chaque saut.

Comment fonctionne l'échange de jetons au nom de l'entreprise

On-behalf-of l'échange de jetons est intégré au fournisseur d'informations d'identification OAuth existant. Lorsqu'un agent demande un jeton en aval, AgentCore Identity prend automatiquement le jeton d'accès entrant, représentant l'appelant en amont, ainsi que les informations d'identification du client déjà stockées dans le fournisseur d'informations d'identification, et négocie la demande d'échange de jetons avec le serveur d'autorisation IdP ou OAuth du client. Il soumet la demande, analyse la réponse et la renvoie à l'agent. Les développeurs d'agents n'ont jamais besoin de gérer le jeton entrant ni de gérer directement les secrets des clients. Le serveur d'autorisation prend la décision d'autorisation finale, notamment s'il convient d'accorder les étendues demandées et d'autoriser la délégation.

AgentCore Identity soutient les fournisseurs d'identité qui mettent en œuvre l'échange de jetons au nom de l'une ou l'autre des deux normes établies. En vertu de la RFC 8693 (OAuth 2.0 Token Exchange), le fournisseur d'informations d'identification suit le type d'autorisation d'échange de jetons standard, en soumettant le jeton entrant en tant que subject_token à côté des informations d'identification du client de l'agent. Certains fournisseurs d'identité implémentent plutôt au nom de la RFC 7523 §2.1 (JWT Profile for OAuth 2.0 Authorization Grants), où le jeton entrant est présenté sous la forme d'une autorisation JWT pour obtenir le jeton d'accès en aval. Vous configurez le mode attendu par votre fournisseur d'identité lors de la configuration du fournisseur d'informations d'identification OAuth ; AgentCore Identity gère les différences de protocole à partir de là.

Configuration de l'échange de jetons pour le compte

Pour utiliser cette fonctionnalité, configurez un mode d'échange de jetons au nom de votre fournisseur d'informations d'identification OAuth 2.0. Vous pouvez personnaliser la configuration lorsque vous utilisez un fournisseur personnalisé ou choisir l'un des fournisseurs pris en charge.

Fournisseur d'informations d'identification OAuth2 personnalisé

Pour configurer l'échange de jetons au nom d'un fournisseur personnalisé sur la AWS console, voir Ajouter un client OAuth à l'aide d'un fournisseur personnalisé. Vous pouvez également le configurer à l'aide de la CLI

Exemple de CLI : utilisation du type de subvention TOKEN_EXCHANGE avec un jeton machine à machine comme jeton acteur

aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "sample-obo-custom", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://my.idp.com/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientSecret": "your-client-secret", "clientAuthenticationMethod": "CLIENT_SECRET_BASIC", "onBehalfOfTokenExchangeConfig": { "grantType": "TOKEN_EXCHANGE", "tokenExchangeGrantTypeConfig": { "actorTokenContent": "M2M", "actorTokenScopes": ["scope1", "scope2"] } } } } }'

Exemple de CLI : utilisation du type de subvention JWT_AUTHORIZATION_GRANT

aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "sample-obo-custom", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://my.idp.com/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientSecret": "your-client-secret", "clientAuthenticationMethod": "CLIENT_SECRET_BASIC", "onBehalfOfTokenExchangeConfig": { "grantType": "JWT_AUTHORIZATION_GRANT" } } } }'

Configuration d'échange de jetons spécifique au fournisseur au nom du fournisseur

AgentCore Identity inclut une assistance prête à l'emploi pour le compte de l'échange de jetons pour certains fournisseurs, préconfigurée conformément à la documentation publique de chaque fournisseur. Pour ajuster les paramètres au niveau du protocole au-delà de ces valeurs par défaut, configurez un fournisseur personnalisé pour un contrôle total de la configuration d'échange.

Nom du fournisseur Mode type de subvention Remarque Documents associés

MicrosoftOauth2

JWT_AUTHORIZATION_GRANT

* Le On-Behalf-Of flux de Microsoft est un modèle de délégation propriétaire basé sur la norme RFC 7523, qui utilise le type de JWT-bearer subvention pour faciliter l'échange sécurisé de jetons entre des services hiérarchisés.

requested_token_use=on_behalf_ofest automatiquement ajouté à la demande à moins qu'il ne soit remplacé.

Plateforme d'identité Microsoft et flux OAuth 2.0 On-Behalf-Of

Utilisation de l'échange de jetons au nom de l'entreprise

Pour demander un jeton au nom de l'utilisateur au moment de l'exécution, appelez GetResourceOauth2Tokenet définissez OAuth2Flow sur le. ON_BEHALF_OF_TOKEN_EXCHANGE Transmettez le jeton d'accès à la charge de travail que vous avez obtenu GetWorkloadAccessTokenForJWT: ce jeton contient le jeton entrant comme sujet, qu' AgentCore Identity utilise comme jeton d'objet dans l'échange. Pour la référence complète de l'API, consultez la AWS documentation.

# obtain workload access token using inbound token aws bedrock-agentcore get-workload-access-token-for-jwt --workload-name sample-workload \ --user-token "inbound-jwt-token" { "workloadAccessToken": "workload-access-token" } # perform on-behalf-of token exchange aws bedrock-agentcore get-resource-oauth2-token --resource-credential-provider-name sample-obo-provider \ --oauth2-flow ON_BEHALF_OF_TOKEN_EXCHANGE --scopes "sample-scope" \ --workload-identity-token "workload-access-token" { "accessToken": "on-behalf-of-token" }

Types de subventions et types de jetons

type de subvention = ÉCHANGE DE JETONS

Avec ce type de subvention, AgentCore Identity envoie le JWT entrant en tant que jeton d'objet pour obtenir un jeton d'accès. Configurer actor_token_content la valeur comme étant l'une M2M des valeurs AWS_IAM_ID_TOKEN_JWT suivantes : NONE

Paramètre Value

grant_type

TOKEN_EXCHANGE(nous le mappons urn:ietf:params:oauth:grant-type:token-exchange lors de la construction de la demande d'échange de jetons)

subject_token

Nous utilisons le jeton JWT entrant et mappons le type de jeton en question urn:ietf:params:oauth:token-type:jwt lors de la construction de la demande d'échange de jetons.

Par défaut et peut être remplacé, voir CustomParameters

type de subvention = JWT_AUTHORIZATION_GRANT

Avec ce type de subvention, AgentCore Identity envoie le JWT entrant en tant qu'autorisation pour obtenir un jeton d'accès. Aucune actor_token_content configuration n'est requise car ce type de subvention ne nécessite aucun jeton d'acteur.

Paramètre Value

grant_type

JWT_AUTHORIZATION_GRANT(nous le mappons urn:ietf:params:oauth:grant-type:jwt-bearer lors de la construction de la demande d'échange de jetons)

assertion

Jeton JWT entrant

actor_token_content = M2M (uniquement lorsque grant_type = TOKEN_EXCHANGE)

AgentCore Identity effectue d'abord une authentification machine à machine (autorisation des informations d'identification du client OAuth 2.0) auprès du fournisseur d'informations d'identification pour obtenir un jeton d'accès, puis l'envoie en tant que. actor_token

Paramètre Value

actor_token_content

M2M

  • nous le mappons urn:ietf:params:oauth:token-type:access_token lors de la construction d'une demande d'échange de jetons

  • nous obtenons un jeton d'accès via client_credentials une subvention

La actorTokenScopes configuration facultative est utilisée comme scope paramètres pour la demande d'informations d'identification du client.

actor_token_content = _TOKEN_JWT (uniquement lorsque grant_type = AWS_IAM_IDTOKEN_EXCHANGE)

AgentCore Les appels d'identité sts:GetWebIdentityTokenutilisant le point de terminaison du jeton du fournisseur d'informations d'identification comme réclamation AUD, puis envoient le JWT résultant en tant que. actor_token

Paramètre Value

actor_token_content

AWS_IAM_ID_TOKEN_JWT

  • nous le mappons urn:ietf:params:oauth:token-type:jwt lors de la construction d'une demande d'échange de jetons

  • nous obtenons JWT via sts:GetWebIdentityToken

Ce mode nécessite que votre compte soit activé pour la fédération d'identité Web sortante. Consultez iam:EnableOutboundWebIdentityFederation.

actor_token_content = NONE (uniquement lorsque grant_type = TOKEN_EXCHANGE )

Non actor_token ou actor_token_type est inclus dans la demande d'échange de jetons. Utilisez ce mode avec les fournisseurs d'identité qui dérivent l'identité de l'acteur uniquement à partir de l'authentification du client.