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

如何在基于Microsoft Identity Platform的Blazor Server中获取AD组与OfficeLocation

解决方案

无需Graph API的方法:配置Azure AD应用,让Claims包含所需属性

默认Azure AD返回的Claims仅包含基础字段,要获取OfficeLocation和AD组信息,需在Azure AD应用注册中配置可选声明与组声明,让这些信息直接嵌入到用户登录后的令牌中,即可通过ClaimsPrincipal读取:

1. 获取OfficeLocation属性

  • 登录Azure门户,找到你的应用注册,进入「令牌配置」页面
  • 点击「添加可选声明」,选择ID令牌(Blazor Server场景一般用ID令牌)
  • 在可选声明列表中找到officeLocation并勾选,保存配置
  • 登录后即可从Claims中读取该属性,扩展基类方法如下:
public async Task<string?> GetOfficeLocation()
{
    var user = await GetUser();
    return user?.FindFirst("officeLocation")?.Value;
}

2. 获取AD组信息

Azure AD支持两种方式将组信息返回至Claims:

方式一:获取组ID

  • 在「令牌配置」页面点击「添加组声明」
  • 选择「安全组」或「所有组」,并指定返回格式为「组ID」
  • 登录后可读取groups类型的Claim获取组ID列表:
public async Task<List<string>?> GetGroupIds()
{
    var user = await GetUser();
    return user?.FindAll("groups")?.Select(c => c.Value).ToList();
}

方式二:获取组名称

  • 先在应用注册的「API权限」中添加「Directory.Read.All」应用权限,需管理员同意
  • 回到「组声明」配置,选择返回格式为「组名称」
  • 登录后可读取group_names类型的Claim获取组名称列表:
public async Task<List<string>?> GetGroupNames()
{
    var user = await GetUser();
    return user?.FindAll("group_names")?.Select(c => c.Value).ToList();
}

关于Graph API的使用场景

如果你的需求满足以下任一情况,使用Graph API是更合适的选择:

  • 需要获取Azure AD用户的更多属性(不止OfficeLocation)
  • 需要实时同步组信息(Claims仅在登录时生成,不会自动更新组变更)
  • 希望避免令牌体积过大(携带过多Claims会增加令牌大小)

但仅需OfficeLocation和基础组信息时,通过Azure AD配置直接读取Claims是更轻量、高效的方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:22