2009-10-05 10 views
7

Ich finde nicht viel Dokumentation zur Verwendung der Windows-Authentifizierung in einer WPF-App. Ich hätte nicht gedacht, dass es anders wäre als in jeder Nicht-WPF-App, aber es scheint so zu sein. Ich möchte in mein Projekt Eigenschaften -> Anwendung gehen und sicherstellen, dass die Windows-Authentifizierung aktiviert ist, aber diese Option ist in einer WPF-App nicht verfügbar (wie im folgenden Dokument bestätigt).Wie Windows-Authentifizierung in WPF verwenden?

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

Wenn ich das alles ignorieren und nur Blick auf My.User.Name (VB), ist es leer. Das sagt mir, dass irgendwie die Windows-Authentifizierung nicht aktiviert ist.

Scheint so, als gäbe es ein Konzept, das ich vermisse; Könnte mir jemand in die richtige Richtung zeigen?

Mein Plan ist es, ein PrincipalPermission-Attribut zu verwenden, um den Zugriff auf bestimmte Teile meiner App (oder vielleicht die gesamte App, durch Anwendung auf Application_Startup()) zu beschränken.

Antwort

7

Itowlson Antwort war richtig, aber auch, um die Principal auf jeder Methode zu verwenden, müssen Sie zuerst das Fenster Haupt durch den Aufruf der aktuelle Haupt machen:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal) 
5

Der Grund dafür, dass dies in WPF nicht funktioniert, ist, dass diese Dienste in der WindowsFormsApplicationBase-Klasse von VB implementiert sind, die in WPF-Anwendungen nicht verwendet wird. Um das Gleiche selbst zu tun:

Rufen Sie WindowsIdentity.GetCurrent(), um die Windows-Benutzeridentität zu erhalten. Sie können den Namen daraus erhalten.

Wenn Sie den Thread-Principal genau wie die VB Windows-Authentifizierungsoption festlegen möchten, rufen Sie Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()) - das ist genau das, was WindowsFormsApplicationBase intern tut.

EDIT: Wenn Sie die My.User API bevorzugen, sieht es aus wie sollte es möglich sein, das Gleiche zu tun My.User.InitializeWithWindowsUser() durch den Aufruf. Ich habe das allerdings nicht getestet.

Verwandte Themen