System.Security.Principal.WindowsIdentity и WinForms Authentication - PullRequest
2 голосов
/ 04 ноября 2010

Я хотел бы использовать модель аутентификации Windows для аутентификации пользователей, использующих мое приложение WinForms на C # 3.5:

  1. Пользователь, вошедший в Windows, автоматически вошел в мое приложение.
  2. Если пользователь хочет войти в систему явным образом, его имя пользователя и пароль должны быть проверены Windows или, что еще лучше, по запросу Windows со стандартным диалогом Windows.Результатом должен стать еще один WindowsIdentity объект.

Первый был очень легко решить давным-давно: я прочитал

WindowsIdentity identity = WindowsIdentity.GetCurrent();

Просто чтобы убедиться, я проверяю

if (identity.IsAuthenticated) { ... }

Во втором случае я обнаружил некоторые вызовы API в других вопросах и ответах SO, но я почти уверен, должен быть управляемый способ для этого, я не прав?

Далее мне интересно, является ли мой подход для 1. безопасным и уместным.Спасибо за ваш отзыв!

Обновление: По словам Ивана, я должен использовать подход P / Invoke.Это в принципе нормально, но тогда мне все еще нужен способ получить объект WindowsIdentity для этого определенного пользователя, у которого для свойства IsAuthenticated установлено значение true.Сам по себе вызов P / Invoke не возвращает такой объект. Как это можно сделать?

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Я не уверен в этом, но похоже, что вы хотите использовать WindowsIdentity Ctor , который принимает IntPtr. Чтобы получить параметр, который передается в этот конструктор, вы можете вызвать функцию Win32 API LogonUser (). Это даст вам WindowsIdentity для этого пользователя.

1 голос
/ 04 ноября 2010

Нет управляемого способа сделать это, вы должны сделать pinvoke (вызов API), как вы сказали.Подход № 1 полностью в порядке ... доверие Microsoft:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...