本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
客户机身份验证方法
客户端身份验证方法控制 OAuth 客户端在请求访问令牌时如何使用授权服务器的令牌端点进行身份验证。
对于提供商特定的凭证提供商, AgentCore Identity 会根据每个供应商的要求为您管理客户端身份验证方法,因此无需进行额外配置。
对于需要更精细控制的用例,例如使用 IAM-signed JWT 断言而不是客户端密钥进行身份验证,或者以要求与内置供应商不同的授权服务器为目标,请使用自定义提供商,它允许您从以下支持的方法中进行选择。
支持的客户端身份验证方法
AgentCore Identity 支持客户端身份验证方法的以下值。
-
CLIENT_SECRET_BASIC(默认)— 根据OAuth 2.0(RFC 6749)的第 2.3.1 节,从授权服务器收到客户端密钥值的客户端使用 HTTP 基本身份验证方案向授权服务器进行身份验证。客户端 ID 和客户端密钥均为必填项。 -
CLIENT_SECRET_POST— 根据 OAuth 2.0 (RFC 6749) 第 2.3.1 节,通过在请求正文中包含客户端凭据,从授权服务器收到客户端密钥值的客户端向授权服务器进行身份验证。客户端 ID 和客户端密钥均为必填项。 -
AWS_IAM_ID_TOKEN_JWT— 根据 RFC 7523 第 2.2 节,通过发送代理执行角色的 AWS IAM-signed JWT 断言(通过 sts: 获取 GetWebIdentityToken)作为客户端断言,向授权服务器的令牌端点进行身份验证。授权服务器必须支持此机制并信任 AWS IAM 作为发行者。选择此方法时,不需要客户端密钥,只有用户委托的访问流程(User-delegated 访问权限(OAuth 2.0 授权码授予))才需要客户端 ID。要用AWS_IAM_ID_TOKEN_JWT作客户端身份验证方法,先决条件如下:-
必须在您的账户上启用出站 Web 联合身份验证。使用 i am: 将其启用EnableOutboundWebIdentityFederation。
-
调用 AWS IAM 身份必须有权调用 sts: GetWebIdentityToken 。
-
-
PRIVATE_KEY_JWT通过发送短暂的 JWT 客户端断言对授权服务器的令牌端点进行身份验证。 AgentCore 根据 RFC 7523 第 2.2 节,Ikms:Signdentity 使用客户管理的 AWS KMS 非对称密钥构建和签署断言。私钥永远不会离开 KMS。授权服务器根据您注册的公钥验证断言。选择此方法时,不需要客户端密钥。所有流程都需要客户端 ID。要用PRIVATE_KEY_JWT作客户端身份验证方法,请满足以下先决条件:-
AWS KMS 中的非对称签名密钥
SIGN_VERIFY,使用密钥,适当的密钥策略和与您选择的签名算法兼容的密钥规范(有关算法到密钥规格表,请参阅私钥 JWT)。 -
AgentCore 身份执行角色(或调用身份)必须具有 KMS 密钥
kms:DescribeKey和kms:Sign权限。 -
身份提供商的授权服务器必须支持私钥 JWT 客户端身份验证,并且相应的公钥必须在其授权服务器上注册。
-
如何配置客户端身份验证方法
为 CustomOauth 2 配置客户端身份验证方法
要在 AWS Console 上为自定义提供商配置客户端身份验证方法,请参阅使用自定义提供商添加 OAuth 客户端。您也可以使用 CLI 对其进行配置。
CLI 示例:使用 C LIENT_SECRET_BASIC 作为客户端身份验证方法
aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "sample-client-basic", "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" } } }'
CLI 示例:使用 AWS_IAM_ID _TOKEN_J WT 作为客户端身份验证方法
aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "sample-iam-jwt", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://my.idp.com/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientAuthenticationMethod": "AWS_IAM_ID_TOKEN_JWT" } } }'
CLI 示例:使用 PRIVATE_KEY_J WT 作为客户端身份验证方法
aws bedrock-agentcore-control create-oauth2-credential-provider \ --cli-input-json '{ "name": "sample-private-key-jwt", "credentialProviderVendor": "CustomOauth2", "oauth2ProviderConfigInput": { "customOauth2ProviderConfig": { "oauthDiscovery": { "discoveryUrl": "https://your-idp.example.com/.well-known/openid-configuration" }, "clientId": "your-client-id", "clientAuthenticationMethod": "PRIVATE_KEY_JWT", "privateKeyJwtConfig": { "privateKeySource": { "kmsKeySource": { "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/your-key-id" } }, "signingAlgorithm": "RS256" } } } }'
有关完整配置参考的更多信息,包括 KMS 密钥设置、跨账户支持和签名算法选项,请参阅私钥 JW T。
Notice
不建议使用该tokenEndpointAuthMethods字段来支持客户端身份验证方法,但保留该字段是为了在 CLI 和 SDK 中实现向后兼容。在同一个请求中同时提供两者将导致验证错误。