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

