如何从@context.User获取用户的名字或姓氏?

How to get user's first name or last name from @context.User?

我使用 Windows 身份验证创建了服务器端 Blazor 应用程序。它创建了以下文件。

LoginDisplay.razor

<AuthorizeView>
    Hello, @context.User.Identity.Name!
</AuthorizeView>

然而,它显示"DOMAIN\username"。这是一种显示用户名字的方法吗?

我尝试打印所有索赔类型。

@foreach(var c in context.User.Claims)
{
    <p>@c.Value @c.Type</p>
}

但是,只有一种类型有名称。 (值为 DOMAIN\username

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

你必须去 AD 才能获得该信息。但是在 ASP.NET Core 中连接到 AD 并不简单。

如果您只打算在 Windows 服务器上 运行 这个,那么您可以从 NuGet 安装 Microsoft.Windows.Compatibility,然后使用 DirectoryEntry 直接绑定到对象使用其 SID。 SID 在 context.User.Identity.User.Value.

中可用
<AuthorizeView>
@{
    var identity = (WindowsIdentity) context.User.Identity;
    var user = new DirectoryEntry($"LDAP://<SID={identity.User.Value}>");

    //Add any other attributes you want to read to this list
    user.RefreshCache(new [] { "givenName" });
}
    Hello, @user.Properties["givenName"].Value!
</AuthorizeView>

您可能感兴趣的其他属性:

  • sn: 姓
  • displayName:例如,他们的姓名在 Outlook 中的显示方式。通常这是 "Last, First"

您也可以通过目录服务(使用 NuGet 安装)按如下方式使用它。

_Imports.razor

@using System.DirectoryServices.AccountManagement

LoginDisplay.razor

<AuthorizeView>
    @{
        var pcontext = new PrincipalContext(ContextType.Domain, "XYZ.net", "DC=XYZ,DC=net");
        var principal = UserPrincipal.FindByIdentity(pcontext, context.User.Identity.Name);
    }    
    Hello, @principal.GivenName @principal.Surname!
</AuthorizeView>