Azure应用注册:如何为客户端密钥/证书限制API角色访问?
解决Microsoft Identity Platform API角色分配问题
你的思路方向是对的,但混淆了客户端身份凭证(密钥/证书)和应用角色分配的逻辑:密钥/证书只是客户端用来证明自身身份的工具,角色是直接分配给客户端应用本身的,不是绑定到密钥或证书上。
正确的操作流程
- 首先确认你的API应用注册已创建好
只读、读写两个应用角色。 - 找到调用API的客户端应用注册:
- 进入客户端应用的「API权限」页面
- 点击「添加权限」→ 选择「我的API」,找到你的目标API
- 在「应用权限」分类下(注意是应用权限,不是委派权限)选择对应的角色(只读或读写),完成添加
- 点击「授予管理员同意」(应用角色必须经过管理员同意才能生效)
API端权限校验
客户端用密钥/证书获取令牌时,Azure AD会自动把该客户端已分配的角色放到令牌的roles声明里。你的API需要在每个端点的逻辑里校验这个声明:
// ASP.NET Core示例:按角色限制端点访问 [Authorize(Roles = "读写")] [HttpPost("/api/write-data")] public IActionResult WriteData() { // 仅拥有读写角色的客户端可访问 return Ok(); } [Authorize(Roles = "只读,读写")] [HttpGet("/api/read-data")] public IActionResult ReadData() { // 拥有只读或读写角色的客户端可访问 return Ok(); }
关键说明
- 同一个客户端应用的所有密钥/证书共享该应用的角色权限,因为密钥只是身份验证的凭证,不单独关联权限。如果需要不同的权限,应该创建多个客户端应用注册,分别分配不同角色。
- 确保API的身份验证配置正确,能正确解析Azure AD颁发的令牌并提取
roles声明。
内容的提问来源于stack exchange,提问作者Albert T
相关产品推荐
相关产品推荐

