Как получить имя или фамилию пользователя из @ context.User? - PullRequest
0 голосов
/ 18 октября 2019

Я создал приложение Blazor на стороне сервера, используя аутентификацию Windows. И он создал следующий файл.

LoginDisplay.razor

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

Однако, он показывает «ДОМЕН \ имя пользователя». Это способ показать имя пользователя?

Я попытался напечатать все типы утверждений.

@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

1 Ответ

0 голосов
/ 18 октября 2019

Вы должны выйти в AD для этой информации. Но подключиться к AD в ASP.NET Core не просто.

Если вы собираетесь запускать это только на сервере Windows, вы можете установить Microsoft.Windows.Compatibility из NuGet и использовать 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, например. Часто это «Последний, Первый»
...