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

Blazor Server从Azure AD B2C获取关联邮箱的唯一用户ID

从Azure AD B2C获取永久唯一用户标识的解决方案

在Azure AD B2C中,与用户邮箱绑定且永久唯一的用户标识是对象ID(oid),这个ID是用户在B2C租户中的固定标识符,不会随登录状态、登录方式变化,完全符合你的需求。

你可以在现有代码基础上,通过遍历Claims的方式同时获取oid,以下是修改后的完整代码:

[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }

private ClaimsPrincipal AuthenticationStateUser { get; set; }
private ClaimsPrincipal AuthenticationStateProviderUser { get; set; }

private string email { get; set; } = string.Empty;
// 添加存储永久用户ID的变量
private string permanentUserId { get; set; } = string.Empty;

private async Task OnAuthorized()
{
    AuthenticationState authenticationState;

    authenticationState = await authenticationStateTask;
    this.AuthenticationStateUser = authenticationState.User;

    authenticationState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
    this.AuthenticationStateProviderUser = authenticationState.User;
    foreach (var claim in this.AuthenticationStateProviderUser.Claims)
    {
        if (claim.Type == "emails")
        {
            email = claim.Value.ToString().Replace("[", "").Replace("]", "").Replace("\"", "");
        }
        // 获取永久唯一的对象ID(oid)
        else if (claim.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier" 
                 || claim.Type == "oid")
        {
            permanentUserId = claim.Value;
        }
    }   
}

关键说明:

  • http://schemas.microsoft.com/identity/claims/objectidentifier是oid的完整声明类型,部分场景下也会直接使用短名称oid,代码中同时判断两种情况确保兼容性。
  • 若你需要的是用户在特定应用中的唯一标识(而非租户全局),也可以使用sub(主题ID),但sub会随用户的登录身份提供商变化,而oid是租户内全局永久唯一的,更贴合你“与邮箱绑定且永久唯一”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:42:33