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

Azure API Management与OAuth2权限疑问:是否需应用角色?

Azure APIM OAuth2 应用角色与API权限详解(服务到服务场景)

1. 到底要不要应用角色和权限?

必须要。你现在删除所有权限后还能调用API,只是因为你的APIM仅做了Token合法性校验(比如验证是否由可信Azure AD签发、是否未过期),没有配置权限校验逻辑。这种状态下,任何能获取到该API有效Bearer Token的应用都可以随意调用,完全没有安全边界,等于没做实际的权限控制。

2. 需要的权限/角色及各自作用

(1)应用角色(定义在APIM对应的资源应用注册中)

  • 这是你为APIM API设定的权限标识,比如Reader、Writer,用来区分不同客户端的访问权限范围。你的场景是简单GET接口,只需要一个Reader角色即可,代表客户端拥有该API的只读访问权限。
  • 核心作用:客户端请求到的Token中会携带该角色声明,APIM后续可通过校验这个声明来判断是否允许请求通行。

(2)API权限(客户端应用向资源应用申请的权限)

  • 你需要在客户端应用注册中,向APIM对应的资源应用申请上述Reader角色权限,且必须选择应用权限类型(因为你的场景是服务到服务调用,无真实用户参与),同时点击「授予管理员同意」——只有完成同意,Azure AD才会将该角色声明注入到颁发给客户端的Token中。
  • 额外说明:教程中添加的User.Read.All和User.ReadWrite.All属于Microsoft Graph权限,你的场景和Graph服务无关,完全是多余的,直接删除即可。

(3)为什么无权限也能拿到Token?

Azure AD颁发Token时,只要客户端的ID和密钥合法,哪怕没有申请任何权限,也会生成一个“无权限声明”的Token。但这种Token本该被APIM拦截,只是你没配置权限校验策略才得以通行。

3. 如何配置最小权限?

按以下三步操作,缺一不可:

  • 第一步:给APIM的资源应用添加应用角色
    1. 进入Azure AD → 应用注册,找到你为APIM创建的资源应用
    2. 选择「应用角色」→「创建应用角色」
    3. 填写角色名称(如Reader)、显示名称、描述,勾选「允许应用程序访问」后保存。
  • 第二步:给客户端应用添加并同意权限
    1. 进入客户端应用注册 →「API权限」→「添加权限」
    2. 选择「我的 APIs」,找到APIM对应的资源应用
    3. 选择「应用权限」,勾选Reader角色后点击「添加权限」
    4. 点击「授予管理员同意」(应用权限必须由管理员手动确认)
  • 第三步:APIM配置权限校验策略
    这是关键环节,否则前面的配置都无法生效。在你的APIM API的入站策略中添加以下代码,校验Token的roles字段是否包含Reader:
    <validate-jwt header-name="Authorization" failed-validation-httpcode="403" failed-validation-error-message="权限不足,仅允许Reader角色访问">
        <openid-config url="https://login.microsoftonline.com/{你的租户ID}/v2.0/.well-known/openid-configuration" />
        <required-claims>
            <claim name="roles" match="any">
                <value>Reader</value>
            </claim>
        </required-claims>
    </validate-jwt>
    
    添加后,只有携带Reader角色声明的Token才能通过校验,无权限的请求会直接返回403。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:42:51