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

如何配置Legacy API仅允许指定AD用户与Shiny API调用?

解决方案与疑问解答

整体配置思路

要实现Legacy API仅对指定AD用户和Shiny API开放,核心是利用Azure AD的应用权限与身份验证配置,结合App Service内置认证功能,无需大量修改代码即可完成。


1. 是否需要修改Legacy API代码,还是仅通过配置即可实现?

大部分场景下仅需配置即可实现,但如果需要更精细的权限控制(比如针对特定API端点的授权),可能需要少量代码辅助:

  • 基础访问控制:通过Azure App Service的「身份验证」功能启用Azure AD认证,直接在配置层面限制允许访问的主体。
  • 精细权限控制:如果要区分不同调用者的权限范围(比如开发团队只能调用测试端点,Shiny API可调用业务端点),则需要在Legacy API中验证令牌的roles或appid声明,这部分需要少量代码。

2. 我在认证配置中添加了Microsoft身份提供者,但仅能添加AD用户,无法找到Shiny API的系统分配托管身份,该如何授权Shiny API?

系统分配托管身份本质是Azure AD中的一个服务主体,需通过应用权限授权的方式添加:

  • 进入Legacy API的应用注册(或App Service身份验证配置对应的AD应用),在「API权限」→「添加权限」→「我的API」中找到Legacy API的应用注册。
  • 为Shiny API的系统分配托管身份添加应用权限(注意选「应用权限」而非「委派权限」,因为Shiny API是用自身身份调用,而非用户身份)。
  • 完成权限添加后,必须授予管理员同意(仅租户管理员可操作)。
  • 另外,在Legacy API的App Service「身份验证」→「授权」设置中,选择「允许特定用户、组或应用」,搜索Shiny API的系统分配托管身份名称(通常是Shiny API的App Service名称)即可添加。

3. 我已为Legacy应用创建了应用注册,这是否必要?

是的,这是必要的:

  • 应用注册是Azure AD识别Legacy API的身份标识,Shiny API获取的访问令牌需要以这个应用注册的client ID作为受众(aud声明),才能被Legacy API验证通过。
  • 同时,应用注册也是配置权限、令牌声明、受众范围的核心载体,没有它无法完成Azure AD的身份验证配置。

4. 使用gRPC替代REST能否解决问题?

不能,这和协议无关:

  • 身份验证与授权逻辑基于HTTP请求头中的Bearer令牌,不管是REST还是gRPC,只要基于HTTP/HTTPS传输,都需要同样的Azure AD身份验证配置。
  • gRPC只是通信协议的不同,无法解决当前的访问控制问题,无需为这个需求切换协议。

补充关键配置步骤

  1. 启用Shiny API的系统分配托管身份:在Shiny API的App Service「身份」→「系统分配」中开启状态,记录其对象ID或名称。
  2. 配置Legacy API的App Service身份验证:
    • 启用「Microsoft身份提供者」,关联已创建的Legacy应用注册。
    • 在「授权」选项中设置「需要身份验证」,并添加允许访问的AD用户/组(开发团队)和Shiny API的系统分配托管身份。
  3. 可选:精细令牌验证:若需代码辅助,可在Legacy API中添加中间件,验证令牌的aud(受众为Legacy应用注册的client ID)和appid(Shiny API托管身份的client ID)或oid(对象ID)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:24:29