В приложениях Xamarin UWP, как получить сведения о пользователе, вошедшем в систему Windows.

Мне нужно использовать проверку подлинности Windows в моем приложении Xamarin UWP. Как я могу получить доступ к данным пользователя, вошедшего в систему в настоящее время, в приложении. Необходимо получить идентификатор входа в Active Directory пользователя, который в данный момент вошел в систему Windows.

Я уже пробовал решение ниже, и оно дает мне пустые результаты.

Как можно Я получаю имя пользователя или идентификатор текущего пользователя, выполнившего вход в приложение UWP

Ценю вашу помощь....


person Cin    schedule 09.05.2018    source источник
comment
Добавьте информацию об учетной записи пользователя в свой манифест и получите DomainName, затем вы можете отделить домен от строки.   -  person SushiHangover    schedule 09.05.2018
comment
Это уже пробовал. Но DomainName дает пустое значение.   -  person Cin    schedule 09.05.2018
comment
Используете ли вы ADAL для аутентификации?   -  person Jenny    schedule 09.05.2018
comment
Да. Мы используем АДАЛ   -  person Cin    schedule 10.05.2018


Ответы (3)


Вот пример UWP, использующий ADAL. ADAL.NET не раскрывает напрямую понятие пользователя из контекста проверки подлинности. Он предоставляет UserInfo как свойство AuthenticationResult. Когда вы получите результат проверки подлинности, вы можете использовать свойство UserInfo, чтобы получить отображаемый идентификатор вошедшего пользователя.

Вот еще информация из вики ADAL.

person Jenny    schedule 11.05.2018

Если вы не добавили Информацию об учетной записи пользователя< /strong> вашего приложения в Package.appxmanifest, у вас не будет разрешения на доступ к информации об учетной записи пользователя.

введите здесь описание изображения

По другим причинам, если вы аутентифицировались с помощью hotmail, вам нужны KnownUserProperties.FirstName и KnownUserProperties.LastName, чтобы получить имя вашей учетной записи.

private async void GetUser()
{
    IReadOnlyList<User> users = await User.FindAllAsync();

    var current = users.Where(p => p.AuthenticationStatus == UserAuthenticationStatus.LocallyAuthenticated &&
                                p.Type == UserType.LocalUser).FirstOrDefault();

    // user may have username
    var data = await current.GetPropertyAsync(KnownUserProperties.AccountName);
    string displayName = (string)data;

    // authinticated using hotmail 
    if (String.IsNullOrEmpty(displayName))
    {

        string a = (string)await current.GetPropertyAsync(KnownUserProperties.FirstName);
        string b = (string)await current.GetPropertyAsync(KnownUserProperties.LastName);
        displayName = string.Format("{0} {1}", a, b);
    }
}

Обратите внимание, что приведенный выше код работает только в собственном проекте UWP, и его нельзя использовать непосредственно в pcl, вам необходимо создать метод GetUser через DependencyService.

Обновить

Если вы авторизовались с помощью ADAL, вы можете использовать метод AcquireTokenSilentAsync для автоматического получения информации из кэша токенов. -using-a-cached-token" rel="nofollow noreferrer">это.

person Nico Zhu - MSFT    schedule 10.05.2018
comment
Я пробовал с проектом Native UWP. Все еще не работает. Все свойства KnownUserProperties дают пустую строку. Это из-за каких-либо ограничений безопасности, применяемых в Windows? - person Cin; 10.05.2018
comment
Если у вас есть авторизация, вы можете использовать метод AcquireTokenSilentAsync для получения информации из кэша токенов, чтобы получить дополнительную информацию по адресу это. - person Nico Zhu - MSFT; 11.05.2018

Это довольно просто. Вы должны сделать это на уровне конкретной платформы, используя Windows.System.User, чтобы получить информацию о текущем пользователе. Вот сообщение, в котором подробно описывается как это сделать.

person Damien Doumer    schedule 10.07.2018