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

时间:2019-10-18 20:07:47

标签: asp.net-core razor active-directory blazor asp.net-authorization

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

LoginDisplay.razor

for label in df.index:

    for path, directories, files in os.walk('voxceleb1/wav_dev_files/' + label):
        for file in files:
            if file.endswith('.wav'):
                count = count + 1
                rate,signal = wavfile.read(os.path.join(path, file))

print(count)

但是,它显示“ DOMAIN \ username”。是显示用户名字的一种方法吗?

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

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

但是,只有一种带有名称的类型。 (值为@foreach(var c in context.User.Claims) { <p>@c.Value @c.Type</p> }

DOMAIN\username

2 个答案:

答案 0 :(得分:2)

您还可以通过目录服务(通过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>

答案 1 :(得分:0)

您必须去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中的显示方式。通常这是“最后,第一”