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

基于Azure AD认证的ASP.NET Core应用能否获取更多用户属性作为声明?

在ASP.NET Core Azure AD认证中添加更多用户属性为声明

当然可以,主要有两种途径实现这个需求:

1. 通过Azure门户配置可选声明

这是最简单的方式,直接在Azure AD应用注册里指定要返回的额外属性:

  • 登录Azure门户,找到你的应用注册
  • 进入令牌配置页面,点击「添加可选声明」
  • 选择要配置的令牌类型(ID令牌或访问令牌),然后勾选需要的属性,比如email、family_name、given_name、jobTitle等
  • 保存配置后,用户重新登录应用,ClaimsPrincipal里就会自动带上这些新增的声明

2. 自定义处理或调用Graph API获取更多属性

如果Azure提供的可选声明不够用,还可以在代码里自定义处理:

方式一:解析令牌添加声明

在认证配置的OnTokenValidated事件中,直接从令牌里提取额外字段并添加为声明:

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Events = new OpenIdConnectEvents
    {
        OnTokenValidated = context =>
        {
            // 从令牌中提取jobTitle属性并添加为自定义声明
            var jobTitle = context.Principal.FindFirst("jobTitle")?.Value;
            if (!string.IsNullOrEmpty(jobTitle))
            {
                context.Principal.Identities.First().AddClaim(new Claim("job_title", jobTitle));
            }
            return Task.CompletedTask;
        }
    };
});

方式二:调用Graph API获取更多属性

如果需要的属性不在令牌里,可以调用Microsoft Graph API获取用户的完整信息,再添加为声明:

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Events = new OpenIdConnectEvents
    {
        OnTokenValidated = async context =>
        {
            // 初始化Graph客户端,使用当前用户的令牌
            var graphClient = new GraphServiceClient(
                new DelegateAuthenticationProvider(request =>
                {
                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.SecurityToken.RawData);
                    return Task.CompletedTask;
                })
            );

            // 获取用户的部门信息
            var user = await graphClient.Me.Request().GetAsync();
            if (!string.IsNullOrEmpty(user.Department))
            {
                context.Principal.Identities.First().AddClaim(new Claim("department", user.Department));
            }
            return Task.CompletedTask;
        }
    };
});

注意:调用Graph API需要给应用注册添加User.Read这类委托权限,并且确保用户登录时同意该权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:57:30