View a markdown version of this page

On-behalf-of杖與 AgentCore Identity 交換 - Amazon Bedrock AgentCore

On-behalf-of杖與 AgentCore Identity 交換

Amazon Bedrock AgentCore Identity 支援 On-Behalf-Of (OBO) 權杖交換,讓代理程式和其他工作負載 - 例如 MCP 伺服器 - 能夠將傳入使用者存取權杖交換為以下游資源伺服器為目標的新範圍存取權杖。由於交換會將一個對象直接發出的權杖轉換為不同下游對象的權杖,因此您的客服人員可以代表已驗證的使用者存取受保護的資源,而不會觸發額外的同意流程。交換的權杖同時具有客服人員自己的身分和原始發起人身分,為資源伺服器提供在每個跳轉時強制執行精細、零信任授權所需的訊號。

on-behalf-of權杖交換的運作方式

On-behalf-of杖交換內建在現有的 OAuth 登入資料提供者中。當客服人員請求下游字符時,AgentCore Identity 會自動取得傳入存取字符 - 代表上游發起人 - 以及已存放在憑證提供者中的用戶端憑證,並與客戶的 IdP 或 OAuth 授權伺服器代理字符交換請求。它會提交請求、剖析回應,並將其傳回給客服人員。客服人員開發人員永遠不需要直接處理傳入字符或管理用戶端秘密。授權伺服器會做出最終授權決策,包括是否授予請求的範圍,以及是否允許委派。

AgentCore Identity 支援透過兩個既定標準之一實作on-behalf-of字符交換的身分提供者。在 RFC 8693 (OAuth 2.0 Token Exchange) 下,登入資料提供者遵循標準符記交換授權類型,將傳入符記作為 subject_token 與代理程式的用戶端登入資料一起提交。有些身分提供者會改為透過 RFC 7523 §2.1 (OAuth 2.0 授權授權的 JWT 設定檔) on-behalf-of 實作 ,其中傳入權杖會以 JWT 授權的形式呈現,以取得下游存取權杖。您可以設定身分提供者在設定 OAuth 登入資料提供者時預期的模式;AgentCore Identity 會處理來自該處的通訊協定差異。

設定on-behalf-of杖交換

若要使用此功能,請在 OAuth 2.0 登入資料提供者上設定on-behalf-of權杖交換模式。您可以在使用自訂提供者時自訂組態,或從其中一個支援的提供者中進行選擇。

自訂 OAuth2 登入資料提供者

若要在 AWS 主控台上為自訂提供者設定on-behalf-of權杖交換,請參閱使用自訂提供者新增 OAuth 用戶端。您也可以使用 CLI 進行設定

CLI 範例:使用TOKEN_EXCHANGE授權類型搭配machine-to-machine字符做為演員字符

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"] } } } } }'

CLI 範例:使用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" } } } }'

供應商特定的on-behalf-of字符交換組態

AgentCore Identity 包含out-of-the-box權 on-behalf-of 杖交換支援,根據每個供應商的公有文件預先設定。若要調整超出這些預設值的通訊協定層級設定,請設定自訂提供者以完全控制交換組態。

供應商名稱 授予類型模式 注意 相關文件

MicrosoftOauth2

JWT_AUTHORIZATION_GRANT

* Microsoft On-Behalf-Of流程是建置在 RFC 7523 標準上的專屬委派模式,使用 JWT-bearer 授予類型來促進分層服務之間的安全字符交換。

requested_token_use=on_behalf_of 除非覆寫,否則 會自動新增至請求。

Microsoft 身分平台和 OAuth 2.0 On-Behalf-Of流程

使用on-behalf-of權杖交換

若要在執行時間請求on-behalf-of權杖,請呼叫 GetResourceOauth2Token 並將 oauth2Flow 設定為 ON_BEHALF_OF_TOKEN_EXCHANGE。傳遞您從 GetWorkloadAccessTokenForJWT 取得的工作負載存取字符 — 此字符將傳入字符作為主體,AgentCore Identity 用作交換中的主體字符。如需完整的 API 參考,請參閱 AWS 文件。

# 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" }

授予類型和字符類型

grant_type = TOKEN_EXCHANGE

使用此授予類型時,AgentCore Identity 會將傳入 JWT 作為主體字符傳送,以取得存取字符。將actor_token_content值設定為 M2MAWS_IAM_ID_TOKEN_JWT或 之一 NONE

參數 Value

grant_type

TOKEN_EXCHANGE (我們會在建構字符交換請求urn:ietf:params:oauth:grant-type:token-exchange時將其映射到 )

subject_token

建構字符交換請求urn:ietf:params:oauth:token-type:jwt時,我們使用傳入 JWT 字符並將主體字符類型映射至 。

預設且可覆寫,請參閱 customParameters

grant_type = JWT_AUTHORIZATION_GRANT

使用此授予類型時,AgentCore Identity 會傳送傳入 JWT 做為取得存取權杖的授權。不需要actor_token_content組態,因為此授予類型不需要任何演員字符。

參數 Value

grant_type

JWT_AUTHORIZATION_GRANT (我們會在建構字符交換請求urn:ietf:params:oauth:grant-type:jwt-bearer時將其映射到 )

assertion

傳入 JWT 字符

actor_token_content = M2M(僅當 grant_type = 時TOKEN_EXCHANGE)

AgentCore Identity 會先對登入資料提供者執行machine-to-machine身分驗證 (OAuth 2.0 用戶端登入資料授權),以取得存取字符,然後將它做為 傳送actor_token

參數 Value

actor_token_content

M2M

  • 建構字符交換請求urn:ietf:params:oauth:token-type:access_token時,我們會將其映射到

  • 我們透過client_credentials授予取得存取權杖

選用actorTokenScopes組態會用作用戶端憑證請求的scope參數。

actor_token_content = AWS_IAM_ID_TOKEN_JWT(僅當 grant_type = 時TOKEN_EXCHANGE)

AgentCore Identity sts:GetWebIdentityToken使用登入資料提供者的字符端點做為 aud 宣告,然後傳送產生的 JWT 做為 actor_token

參數 Value

actor_token_content

AWS_IAM_ID_TOKEN_JWT

  • 建構字符交換請求urn:ietf:params:oauth:token-type:jwt時,我們會將其映射到

  • 我們透過 取得 JWT sts:GetWebIdentityToken

此模式要求您的帳戶啟用傳出 Web 聯合身分。請參閱 iam:EnableOutboundWebIdentityFederation

actor_token_content = NONE(僅當 grant_type = 時TOKEN_EXCHANGE)

權杖交換請求中actor_token_type不包含 actor_token或 。將此模式用於單獨從用戶端身分驗證衍生演員身分的身分提供者。