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
相关产品推荐
相关产品推荐

