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 |
|---|---|---|---|
|
|
* 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. |
|
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
type de subvention = ÉCHANGE DE JETONSAvec 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 |
|---|---|
|
|
|
|
|
Nous utilisons le jeton JWT entrant et mappons le type de jeton en question |
type de subvention = JWT_AUTHORIZATION_GRANT
type de subvention = JWT_AUTHORIZATION_GRANTAvec 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 |
|---|---|
|
|
|
|
|
Jeton JWT entrant |
actor_token_content = M2M (uniquement lorsque grant_type = TOKEN_EXCHANGE)
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 |
|---|---|
|
|
|
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)
= 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 |
|---|---|
|
|
|
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.