You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Azure OAuth2登录的客户端应用如何实现嵌套安全API调用?

Azure嵌套API调用的令牌解决方案

一、代表登录用户实现嵌套API调用(OBO流程)

这是最贴合你需求的方案,允许第一个API以登录用户的身份,向Azure AD请求访问第二个API的令牌。

配置步骤:

  • 为第一个API配置权限:在第一个API的应用注册中,添加对第二个API的委托权限,并获取管理员同意。注意权限类型必须是委托权限(关联用户上下文),而非应用权限。
  • 实现OBO令牌请求逻辑:
    1. 第一个API从请求头中提取客户端应用发来的用户访问令牌;
    2. 用该令牌向Azure AD令牌端点发送请求,申请第二个API的访问令牌。伪代码示例:
      token_endpoint = "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token"
      payload = {
          "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
          "client_id": "第一个API的应用ID",
          "client_secret": "第一个API的客户端密钥",
          "assertion": "从请求头获取的用户访问令牌",
          "scope": "第二个API的作用域(如api://{第二个API应用ID}/.default)",
          "requested_token_use": "on_behalf_of"
      }
      # 发送POST请求获取新令牌
      
  • 使用新令牌调用第二个API:把拿到的第二个API访问令牌放入请求头,发起调用即可。

适用场景:

  • 需要保留用户上下文(比如第二个API要基于用户身份做权限校验、数据过滤);
  • 所有API操作都需要关联到具体登录用户。

二、以API自身身份调用(应用权限)

如果嵌套API调用不需要用户上下文,仅需服务级交互,可以用这种方式。

配置步骤:

  • 为第一个API配置应用权限:在第一个API的应用注册中,添加对第二个API的应用权限,并获取管理员同意。
  • 实现客户端凭据流请求令牌:
    1. 第一个API使用自身的客户端ID和密钥(或证书),向Azure AD请求第二个API的访问令牌。伪代码示例:
      token_endpoint = "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token"
      payload = {
          "grant_type": "client_credentials",
          "client_id": "第一个API的应用ID",
          "client_secret": "第一个API的客户端密钥",
          "scope": "第二个API的作用域(如api://{第二个API应用ID}/.default)"
      }
      # 发送POST请求获取令牌
      
  • 调用第二个API:用拿到的应用级令牌发起调用即可。

适用场景:

  • 操作不依赖用户身份(比如后台数据同步、系统级查询);
  • 第一个API需要独立于用户执行某些操作。

总结

如果需要保留用户上下文,优先用OBO流程实现代表用户的嵌套调用;如果不需要用户身份,用客户端凭据流以API自身身份调用即可。

内容的提问来源于stack exchange,提问作者traceurSaimn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:52:42