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

Blazor WASM集成Azure EntraID:如何获取更多用户信息?

获取Azure EntraID更多用户信息的解决方案

1. 配置Azure EntraID应用注册

  • 登录Azure门户,找到你的应用注册,进入令牌配置页面
  • 点击添加可选声明,选择ID令牌(或访问令牌,根据你的业务场景),勾选需要的用户属性声明:email、given_name、family_name、upn等
  • 若需要更完整的用户属性,需在API权限中添加Microsoft Graph > 委托权限 > User.Read(或User.ReadBasic.All),并完成管理员同意操作

2. 调整Blazor项目配置

Blazor Server 场景

在Program.cs中配置Microsoft Identity时,确保添加额外声明映射逻辑:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches()
    .AddMicrosoftGraph(builder.Configuration.GetSection("DownstreamApi"))
    .AddAdditionalClaims();

// 若默认映射不全,可手动配置Claim映射
builder.Services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.ClaimActions.MapAll();
    // 示例:明确映射email声明
    options.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
});

Blazor WebAssembly 场景

在Program.cs中配置Msal认证时,添加需要的权限Scope:

builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
    options.ProviderOptions.DefaultAccessTokenScopes.Add("https://graph.microsoft.com/User.Read");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("email");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("profile");
});

同时更新appsettings.json的AzureAd配置节点,确保包含对应Scope:

"AzureAd": {
    "Authority": "https://login.microsoftonline.com/[你的租户ID]",
    "ClientId": "[你的客户端ID]",
    "ValidateAuthority": true,
    "Scopes": ["email", "profile", "https://graph.microsoft.com/User.Read"]
}

3. 在Blazor页面中读取用户信息

配置完成后,可通过@context.User直接读取对应声明字段:

@page "/userinfo"
@inject AuthenticationStateProvider AuthenticationStateProvider

<h3>用户详情</h3>

@if (user != null)
{
    <p>用户名: @user.Identity?.Name</p>
    <p>邮箱: @user.FindFirst(System.Security.Claims.ClaimTypes.Email)?.Value</p>
    <p>名: @user.FindFirst(System.Security.Claims.ClaimTypes.GivenName)?.Value</p>
    <p>姓: @user.FindFirst(System.Security.Claims.ClaimTypes.Surname)?.Value</p>
    <p>用户主体名: @user.FindFirst(System.Security.Claims.ClaimTypes.Upn)?.Value</p>
}

@code {
    private System.Security.Claims.ClaimsPrincipal? user;

    protected override async Task OnInitializedAsync()
    {
        var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
        user = authState.User;
    }
}

4. 排查验证

如果仍无法获取目标字段,可使用JWT解码工具查看ID令牌或访问令牌内容,确认是否包含需要的属性。若令牌中无对应字段,需回到Azure EntraID应用注册页面,重新检查可选声明配置、权限授予状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:44:55