Получить имя пользователя и адрес электронной почты из WindowsIdentity на локальном - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь создать веб-приложение для развертывания в нашем интре anet. Я нахожусь на этапе, когда я хочу получить пользовательскую информацию.

Насколько мне известно, я правильно настроил аутентификацию, реализовав:

в Startup-> ConfigureServices:

services.AddRazorPages();
services.AddAuthentication(IISDefaults.AuthenticationScheme);

и в Startup-> Configure:

app.UseAuthentication();
app.UseAuthorization();

Сейчас в модели для страницы я пытаюсь получить информацию о пользователе, и я не могу пройти мимо userName и Groups.

    public void OnGet()
    {

        var wi = (WindowsIdentity)User.Identity;

        this.email = wi.Claims.FirstOrDefault(
            c => c.Type == ClaimTypes.Email)?.Value;
        this.claimsCount = wi.Claims.Count().ToString();
        this.claims = wi.Claims.Select(x => x.Type.ToString()).ToList();
        this.authenticationType= wi.AuthenticationType.ToString();
        this.name = wi.Name;

        if (wi.Groups != null)
            foreach (var group in wi.Groups)
            {

                try
                {
                    this.groups.Add(group.Translate(typeof(NTAccount)).ToString());
                }
                catch (Exception)
                {
                    // ignored
                }
            }

    }

Это то, что я получаю в своей модели после.

this.email = null
this.claimsCount = 51
this.claims = {A list composed of claims/name, claims/primarysid, claims/primarygroupsid, claims/groupsid x 48}
this.authenticationType = Negotiate 
this.name = my login username

Как мне go узнать о адресе электронной почты и имени пользователя (ie: "Джон Доу" не "CA / JDOE") отсюда? Мои исследования заставляют меня поверить, что на моем локальном компьютере может не быть разрешения на получение этой информации.

Если это так, как мне go и проверить сервер развертывания, чтобы узнать, есть ли у него разрешение, необходимое для получения этой информации?

1 Ответ

0 голосов
/ 30 января 2020

1) Мне не хватало пакета / ссылки с именем System.DirectoryServices, которые я смог получить с помощью NuGet.

2) Я добавил следующие строки кода.

        var wi = (WindowsIdentity)User.Identity;

        System.DirectoryServices.DirectoryEntry user = new System.DirectoryServices.DirectoryEntry($"LDAP://<SID={wi.User.Value}>");

        user.RefreshCache(new[] { "givenName", "sn" });

        this.name = user.Properties["givenName"].Value.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...