Как использовать проверку подлинности Windows в WPF? - PullRequest
7 голосов
/ 05 октября 2009

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

http://msdn.microsoft.com/en-us/library/tzdks800.aspx

Если я проигнорирую все это и просто посмотрю на My.User.Name (VB), он будет пустым. Это говорит мне, что почему-то аутентификация Windows не включена.

Похоже, что есть понятие, которое я упускаю; Может ли кто-нибудь указать мне правильное направление?

Мой план состоит в том, чтобы использовать атрибут PrincipalPermission для ограничения доступа к определенным частям моего приложения (или, возможно, ко всему приложению, применяя его к Application_Startup ()).

Ответы [ 2 ]

7 голосов
/ 06 октября 2009

Ответ Итоулсона был верным, но также для того, чтобы использовать PrincipalPermissionAttribute в любом методе, вы должны сначала сделать принципала Windows текущим принципалом, вызвав:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
5 голосов
/ 05 октября 2009

Причина, по которой это не работает в WPF, заключается в том, что эти службы реализованы в классе VB WindowsFormsApplicationBase, который не используется в приложениях WPF. Чтобы сделать то же самое самостоятельно:

Позвоните WindowsIdentity.GetCurrent(), чтобы получить удостоверение пользователя Windows. Вы можете получить имя из этого.

Если вы специально хотите установить принципала потока так, как это делает опция VB Windows Authentication, вызовите Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()) - это именно то, что WindowsFormsApplicationBase делает внутренне.

РЕДАКТИРОВАТЬ: Если вы предпочитаете My.User API, похоже, вы должны быть в состоянии сделать то же самое, позвонив My.User.InitializeWithWindowsUser(). Я не проверял это все же.

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