在Azure Web App中从服务器端获取Azure AD用户组信息
在Azure Web App服务器端获取Azure AD用户组成员身份的实现方案
前提条件
- Azure Web App已完成Azure AD身份验证配置。
- 为Web App配置对应Microsoft Graph应用权限并完成管理员同意(按需选择
User.Read.All或Directory.Read.All,遵循最小权限原则)。 - 启用Web App的托管标识(系统分配或用户分配均可,推荐系统分配)。
具体实现步骤
1. 启用托管标识
登录Azure门户,进入目标Web App的标识 > 系统分配页面,将状态切换为开启,保存后记录应用的客户端ID(后续调用Graph API会用到)。
2. 配置Microsoft Graph应用权限
在Azure AD中找到Web App对应的企业应用,进入权限 > 添加权限:
- 选择Microsoft Graph > 应用权限
- 根据需求添加权限:
- 仅需获取当前用户所属组:添加
User.Read.All - 需要读取全量组信息:添加
Directory.Read.All
- 仅需获取当前用户所属组:添加
- 点击授予管理员同意完成权限生效。
3. 服务器端调用Graph API获取用户组
以ASP.NET Core为例,实现代码如下:
using Microsoft.Graph; using Azure.Identity; using System.Security.Claims; public async Task<List<string>> GetCurrentUserGroupsAsync(HttpContext httpContext) { // 从服务器端身份上下文获取用户Object ID var userId = httpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value; if (string.IsNullOrEmpty(userId)) return new List<string>(); // 使用托管标识初始化Graph客户端 var graphClient = new GraphServiceClient(new DefaultAzureCredential()); // 获取用户所属的组集合 var groupResults = await graphClient.Users[userId].MemberOf .Request() .GetAsync(); // 筛选并返回组名称列表 return groupResults.CurrentPage .Where(item => item.ODataType == "#microsoft.graph.group") .Select(item => item.DisplayName) .ToList(); }
说明:
DefaultAzureCredential会自动利用Web App的托管标识获取Graph API的访问令牌,无需手动管理凭证。- 若使用用户分配的托管标识,需在
DefaultAzureCredential中指定客户端ID:new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = "你的用户分配标识客户端ID" })
4. 安全注意事项
- 严格遵循最小权限原则,只授予满足业务需求的最窄权限。
- 服务器端需确保请求携带的Azure AD ID令牌有效,Web App的内置身份验证中间件会自动完成令牌验证。
内容的提问来源于stack exchange,提问作者harry
相关产品推荐
相关产品推荐

