已完成Azure APIM OAuth2认证后如何实现授权配置的咨询
Azure API Management 基于AAD的OAuth2授权落地方案
前置条件
已完成内部环境中
API Management(以下简称APIM)Developer Portal与AAD的OAuth 2.0认证部署
具体实现步骤
- 配置AAD端角色声明
进入AAD中绑定APIM的注册应用页面,添加自定义权限角色,比如区分API只读、API读写、管理员全权限等不同等级,将角色分配给相应用户/服务主体,配置完成后AAD下发的访问令牌中会自动携带roles字段,作为后续授权判断的核心依据。 - 配置APIM授权校验策略
进入APIM实例的策略编辑页面,可选择全局作用域或者单个API/操作作用域添加授权逻辑,先完成JWT合法性校验,再基于令牌中的角色声明做细粒度权限判断,参考策略代码如下:<inbound> <base /> <!-- 先校验JWT令牌合法性 --> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized" require-expiration-time="true" require-signed-tokens="true"> <openid-config url="https://login.microsoftonline.com/替换为你的AAD租户ID/.well-known/openid-configuration" /> <audiences> <audience>替换为你的APIM资源ID</audience> </audiences> <issuers> <issuer>https://sts.windows.net/替换为你的AAD租户ID/</issuer> </issuers> </validate-jwt> <!-- 细粒度权限校验,比如写操作要求对应角色 --> <choose> <when condition="@(context.Request.Method == "POST" || context.Request.Method == "PUT" || context.Request.Method == "DELETE")"> <when condition="@(!context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt().Claims.GetValueOrDefault("roles", string.Empty).Contains("API.Write"))"> <return-response> <set-status code="403" reason="Forbidden" /> <set-body>当前账号无接口操作权限</set-body> </return-response> </when> </when> </choose> </inbound> - 配置Developer Portal权限映射
在APIM开发者门户的用户组配置页,将AAD角色和APIM门户的用户组做绑定,确保不同权限的用户登录后,仅能看到自身权限范围内的API文档、调试入口,避免越权访问入口暴露。 - 功能验证
分别使用不同权限等级的AAD账号发起接口请求,校验令牌合法但权限不足时返回403、权限匹配时正常请求,同时验证开发者门户的API可见范围符合预期即可。
常见问题排查
- 令牌中无
roles字段:检查AAD应用的自定义角色是否已分配给对应用户/服务主体,确认令牌请求的scope参数包含应用权限范围 - 策略校验不生效:检查策略绑定的作用域是否覆盖目标API,确认JWT校验中的受众、签发者参数和AAD返回的令牌参数完全一致
内容的提问来源于stack exchange,提问作者Pingpong
相关产品推荐
相关产品推荐

