2009-10-05 6 views
7

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

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

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

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

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

ответ

7

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

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal) 
5

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

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

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

EDIT: Если вы предпочитаете API My.User, похоже, что вы должны сделать то же самое, позвонив по телефону My.User.InitializeWithWindowsUser(). Я не тестировал это.

Смежные вопросы