事务令牌
交易令牌是一种专门设计的、有效期有限的 OAuth 2.0 令牌,旨在为信任域内的服务间通信提供安全的授权。 根据 IETF 规范草案( draft-ietf-oauth-transaction-tokens ),这些令牌是经过签名的 JWT,其中包含特定交易的不可变上下文和授权信息。
注: 事务令牌是一项可申请的功能, VDEV-186514: 《AI 代理的安全防护》。 如需申请此功能,请联系您的 IBM 销售代表或 IBM 联系人,并表明您希望启用此功能的意愿。 如果您有相应权限,也可以使用该功能编号提交支持工单。 IBM® Verify 试用订阅用户无法创建支持工单。
关于交易代币
在现代微服务架构中,一个外部请求往往会触发涉及多个服务的内部工作流。 交易令牌通过提供以下功能,解决了这些场景中的安全挑战:
tctx不可变事务上下文 :该(事务上下文)声明包含特定于事务的信息,这些信息在整个调用链中均无法被修改,从而防止了参数篡改。- 完全可追溯性 :每个交易令牌都包含一个唯一的交易标识符(
txnclaim),该标识符支持对处理请求时涉及的所有服务进行端到端追踪。 - 工作负载授权 :(请求者工作负载) 声明
req_wl记录了处理过该事务的所有工作负载的链,从而能够根据调用路径做出精确的授权决策。 - 上下文保留 :当交易令牌在后续的令牌交换中用作主体令牌(替代令牌)时,交易上下文和标识符将被保留,从而确保整个工作流的一致性。
在……中配置事务令牌 IBM Verify
交易令牌可通过标准的 OAuth2.0 令牌交换流程进行请求,并可使用STS客户端或 OpenID Connect应用程序进行配置。
- 致 STS 客户
- 转到管理控制台,然后选择 ”。 单击 “添加 STS 客户端 ”。
- 在 “代币交换设置 ”步骤中,从 “请求的代币 ”下拉菜单中选择 “交易代币 ”。注意: 根据具体用例,事务令牌也可配置为主体令牌或操作者令牌。
- 在 “请求令牌设置 ”步骤中,您可以找到一个用于配置 “事务上下文 ”的选项。 该字段接受一个 CELx 表达式,其输出将直接映射到结果事务令牌中的索赔
tctx。 该表达式必须计算结果为一个有效的 JSON 对象。 例如,{ "amount": "100.00", "currency": "USD", "merchant_id": "requestContext.subject_token.email" }注意: 只有当 “请求的令牌 ”设置为 “交易令牌 ”时 ,“交易上下文 ”字段才会显示。 此字段不适用于其他令牌类型。 - 配置其余必需的属性,然后单击 “保存 ”以创建 STS 客户端。
- 适用于各类应用
- 转到管理控制台,然后选择 。 点击 “添加应用程序 ”,然后选择任意一个与 OpenID Connect相关的应用程序。
- 在 “登录 ”选项卡中,转到 “令牌交换 ”部分。 从 “请求的令牌 ”下拉菜单中选择 “交易令牌 ”。注意: 根据具体用例,事务令牌也可配置为主体令牌或操作者令牌。
- 将事务上下文配置为一个 CELx 表达式,该表达式求值后应返回一个有效的 JSON 对象。 这会直接映射到生成的交易令牌中的 claim
tctx。注意: 只有当 “请求的令牌 ”设置为 “交易令牌 ”时 ,“交易上下文 ”字段才会显示。 此字段不适用于其他令牌类型。 - 配置其余必需的属性,然后单击 “保存 ”以创建应用程序。
事务上下文映射
交易代币的一个显著特征是(交易上下文)声明, tctx 这是一个不可变的声明,用于定义正在执行的交易的上下文。 当交易令牌在后续的令牌交换流程中用作主体令牌时,生成的令牌将保留相同的 tctx 声明,从而确保在整个交易生命周期内实现完全可追溯性。
事务上下文生成逻辑
IBM Verify 根据以下优先级规则确定交易令牌的索取权
tctx :- CELx 表达式的定义 :如果配置了事务上下文中的 CELx 表达式(如前面的第 4 步所述),则会计算该表达式,并将计算结果用作 索赔
tctx。 request_details请求详细信息说明 :如果未配置 CELx 表达式,且令牌交换请求中包含 参数,则 的request_details值将作为 声明tctx使用。- 无上下文 :如果既未提供 CELx 表达式,也
request_details未提供 ,则该tctx声明将从 Transaction 令牌中省略。
CELx 表达示例
以下示例演示了针对常见场景的交易上下文映射 CELx 表达式:
- 场景 1:定义完整的交易上下文
- 此示例定义了 tctx 声明的完整 JSON 有效载荷。 CELx 中提供了主语和动作者令牌声明,分别位于 requestContext.subjectToken 和 requestContext.actorToken :
{ "amount": "100.00", "currency": "USD", "merchant_id": "requestContext.subject_token.email" } - 场景 2:使用运行时值丰富请求详情
requestContext.tctx在 CELx 表达式中,可通过 访问令牌交换请求中的该request_details参数。 您可以通过在运行时添加计算值来增强此上下文:
有关 CELx 语法的完整文档,请参阅《 属性函数指南》。requestContext.tctx.put("requestingUserName", user.userName)