Каков наилучший способ проверить, является ли данное имя пользователя/пароль действительным локальным администратором?

У меня есть приложение UWP, которое будет использоваться пользователями, не являющимися администраторами на компьютере. Я буду создавать страницу администратора в нашем приложении, которая управляет некоторыми настройками только для нашего приложения. Я хочу создать диалоговое окно имени пользователя/пароля, которое открывает доступ к этой странице администратора. Я хочу, чтобы администраторы на локальном компьютере имели доступ к этой странице администратора, поэтому я хочу убедиться, что имя пользователя/пароль, указанные в моем приглашении для входа в систему, являются локальным администратором на коробке. Мне не нужно «регистрировать» этого пользователя где-либо, мне просто нужно открыть доступ к моей странице администратора только для администратора на коробке.

Может ли кто-нибудь указать мне в правильном направлении? Я бы предпочел использовать C #, если это возможно. Во многих примерах, которые я рассмотрел, пользователь входит в систему, мне просто нужно убедиться, что имя пользователя/пароль являются действительными учетными данными администратора.


person user6115111    schedule 07.06.2016    source источник
comment
Возможный дубликат: stackoverflow.com/questions/36713824/   -  person Konstantin    schedule 10.06.2016


Ответы (1)


Приложения UWP изолированы, поэтому информация об уровне привилегий пользователей или системных группах, к которым они принадлежат, не предоставляется. Самое близкое, что я мог бы порекомендовать, - это сохранить имя пользователя, впервые вошедшего в систему, а затем просто проверить, соответствуют ли текущие аутентифицированные имя пользователя и домен сохраненным значениям (так что вы также не будете вводить имя пользователя/пароль и показывать страницу администратора/логин обычным пользователям).

IReadOnlyList<User> localAuthenticatedUsers = await User.FindAllAsync(UserType.LocalUser, UserAuthenticationStatus.LocallyAuthenticated);
User user = users.FirstOrDefault();
if (user != null)
{
    String[] userProperties = new String[]
    {
        KnownUserProperties.AccountName,
        KnownUserProperties.DomainName
    };

    IPropertySet values = await user.GetPropertiesAsync(desiredProperties);
    if (values[KnownUserProperties.AccountName] == storedAccountName && values[KnownUserProperties.DomainName] == storedDomainName) {
        ...
    }
}

Однако такой подход не позволяет проверить несколько администраторов на одной машине. В качестве обходного пути вы можете вести список одобренных пользователей где-то на странице/настройках администратора.

person Konstantin    schedule 10.06.2016
comment
Спасибо за ответ. Интересно, что хотя я работаю над приложением UWP, наше приложение никогда не будет отправлено в магазин, а будет продаваться напрямую покупателям. Поэтому нам не нужно соблюдать какие-либо правила сертификации магазина. Мы это имеем в виду - знаете ли вы способ достижения моей цели доступа к кредитам администратора? - person user6115111; 21.06.2016
comment
Если вы можете написать настольную службу, которая будет проверять логин/пароль для вас, то ваши приложения UWP смогут взаимодействовать с такой службой. - person Konstantin; 21.06.2016