事务令牌

交易令牌是一种专门设计的、有效期有限的 OAuth 2.0 令牌,旨在为信任域内的服务间通信提供安全的授权。 根据 IETF 规范草案( draft-ietf-oauth-transaction-tokens ),这些令牌是经过签名的 JWT,其中包含特定交易的不可变上下文和授权信息。

注: 事务令牌是一项可申请的功能, VDEV-186514: 《AI 代理的安全防护》。 如需申请此功能,请联系您的 IBM 销售代表或 IBM 联系人,并表明您希望启用此功能的意愿。 如果您有相应权限,也可以使用该功能编号提交支持工单。 IBM® Verify 试用订阅用户无法创建支持工单。

关于交易代币

在现代微服务架构中,一个外部请求往往会触发涉及多个服务的内部工作流。 交易令牌通过提供以下功能,解决了这些场景中的安全挑战:
  • tctx 不可变事务上下文 :该(事务上下文)声明包含特定于事务的信息,这些信息在整个调用链中均无法被修改,从而防止了参数篡改。
  • 完全可追溯性 :每个交易令牌都包含一个唯一的交易标识符(txn claim),该标识符支持对处理请求时涉及的所有服务进行端到端追踪。
  • 工作负载授权 :(请求者工作负载) 声明 req_wl 记录了处理过该事务的所有工作负载的链,从而能够根据调用路径做出精确的授权决策。
  • 上下文保留 :当交易令牌在后续的令牌交换中用作主体令牌(替代令牌)时,交易上下文和标识符将被保留,从而确保整个工作流的一致性。

在……中配置事务令牌 IBM Verify

交易令牌可通过标准的 OAuth2.0 令牌交换流程进行请求,并可使用STS客户端或 OpenID Connect应用程序进行配置。
致 STS 客户
  1. 转到管理控制台,然后选择 “应用程序 ”> “STS 客户端 ”。 单击 “添加 STS 客户端 ”。
  2. “代币交换设置 ”步骤中,从 “请求的代币 ”下拉菜单中选择 “交易代币 ”。
    注意: 根据具体用例,事务令牌也可配置为主体令牌或操作者令牌。
  3. “请求令牌设置 ”步骤中,您可以找到一个用于配置 “事务上下文 ”的选项。 该字段接受一个 CELx 表达式,其输出将直接映射到结果事务令牌中的索赔 tctx 。 该表达式必须计算结果为一个有效的 JSON 对象。 例如,
    {
      "amount": "100.00",
      "currency": "USD",
      "merchant_id": "requestContext.subject_token.email"
    }
    注意: 只有当 “请求的令牌 ”设置为 “交易令牌 ”时 ,“交易上下文 ”字段才会显示。 此字段不适用于其他令牌类型。
  4. 配置其余必需的属性,然后单击 “保存 ”以创建 STS 客户端。
适用于各类应用
  1. 转到管理控制台,然后选择 “应用程序” > “应用程序”。 点击 “添加应用程序 ”,然后选择任意一个与 OpenID Connect相关的应用程序。
  2. “登录 ”选项卡中,转到 “令牌交换 ”部分。 从 “请求的令牌 ”下拉菜单中选择 “交易令牌 ”。
    注意: 根据具体用例,事务令牌也可配置为主体令牌或操作者令牌。
  3. 事务上下文配置为一个 CELx 表达式,该表达式求值后应返回一个有效的 JSON 对象。 这会直接映射到生成的交易令牌中的 claim tctx
    注意: 只有当 “请求的令牌 ”设置为 “交易令牌 ”时 ,“交易上下文 ”字段才会显示。 此字段不适用于其他令牌类型。
  4. 配置其余必需的属性,然后单击 “保存 ”以创建应用程序。

事务上下文映射

交易代币的一个显著特征是(交易上下文)声明, tctx 这是一个不可变的声明,用于定义正在执行的交易的上下文。 当交易令牌在后续的令牌交换流程中用作主体令牌时,生成的令牌将保留相同的 tctx 声明,从而确保在整个交易生命周期内实现完全可追溯性。

事务上下文生成逻辑

IBM Verify 根据以下优先级规则确定交易令牌的索取权 tctx
  1. CELx 表达式的定义 :如果配置了事务上下文中的 CELx 表达式(如前面的第 4 步所述),则会计算该表达式,并将计算结果用作 索赔 tctx
  2. request_details 请求详细信息说明 :如果未配置 CELx 表达式,且令牌交换请求中包含 参数,则 的 request_details 值将作为 声明 tctx 使用。
  3. 无上下文 :如果既未提供 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 参数。 您可以通过在运行时添加计算值来增强此上下文:
requestContext.tctx.put("requestingUserName", user.userName)
有关 CELx 语法的完整文档,请参阅《 属性函数指南》。