无需依赖.NET框架,如何用Entra ID处理自定义应用项级权限?
基于Azure Entra ID的项级权限控制实现方案
核心实现逻辑
你需要的项级权限校验,完全可以通过Azure Entra ID的自定义角色配置 + Microsoft Graph API查询完成,无需依赖.NET框架。
1. 定义项级自定义应用角色
在你的Azure Entra ID应用注册中,添加与项权限对应的自定义应用角色:
- 比如针对「项1读取」,定义名为
Item1.Read的角色;针对「项2读取」,定义Item2.Read角色。 - 角色的权限范围设置为你的应用本身,确保这些角色仅作用于你的多用户应用场景。
2. 给用户分配角色
在Azure Entra ID中,将对应的角色分配给目标用户:
- 用户1分配
Item1.Read和Item2.Read角色;用户2仅分配Item1.Read角色。
3. 调用Microsoft Graph API校验权限
无需解析令牌,直接通过HTTP请求调用Graph API即可验证用户权限:
获取Graph API访问令牌
通过OAuth2.0客户端凭据流或授权码流获取访问令牌,示例curl命令:
curl -X POST "https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id={你的应用客户端ID}&scope=https://graph.microsoft.com/.default&client_secret={你的应用客户端密钥}&grant_type=client_credentials"
查询用户的角色分配
使用获取到的访问令牌,调用用户角色分配查询端点:
curl -X GET "https://graph.microsoft.com/v1.0/users/{目标用户ID}/appRoleAssignments" \ -H "Authorization: Bearer {获取到的access_token}"
返回结果中会包含用户被分配的所有应用角色,你只需检查结果里是否包含目标项对应的角色(如Item1.Read),即可判断用户是否拥有该项的读取权限。
直接验证角色归属(可选)
如果需要更高效的校验,可以调用checkMemberObjects端点,直接验证用户是否属于某个角色对应的对象:
curl -X POST "https://graph.microsoft.com/v1.0/users/{目标用户ID}/checkMemberObjects" \ -H "Authorization: Bearer {access_token}" \ -H "Content-Type: application/json" \ -d '{ "ids": ["{目标角色的ID}"] }'
返回的value数组会包含用户所属的角色ID,若包含目标角色ID则说明用户拥有对应权限。
注意事项
- 角色定义要与你的项权限逻辑匹配,可根据业务需求选择按单权限定义角色,或按权限组定义角色。
- 高频权限校验场景建议添加缓存层,减少Graph API调用次数,提升性能。
内容的提问来源于stack exchange,提问作者Tyler DeWitt
相关产品推荐
相关产品推荐

