2009-10-05 4 views
7

Je ne trouve pas beaucoup de documentation sur la façon d'utiliser l'authentification Windows dans une application WPF. Je n'aurais pas pensé que ce serait différent de n'importe quelle application non-WPF, mais il semble que ce soit le cas. Je veux aller dans mon projet Propriétés -> Application et m'assurer que l'authentification Windows est activée, mais cette option n'est pas disponible dans une application WPF (comme le confirme le document suivant).Comment utiliser l'authentification Windows dans WPF?

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

Si j'ignorer tout cela et regarde juste My.User.Name (VB), il est vide. Cela me dit que d'une certaine manière l'authentification Windows n'est pas activée.

On dirait qu'il y a un concept qui me manque; Quelqu'un peut-il m'indiquer la bonne direction?

Mon plan consiste à utiliser un attribut PrincipalPermission pour restreindre l'accès à certaines parties de mon application (ou peut-être l'application entière, en l'appliquant à Application_Startup()).

Répondre

7

réponse de Itowlson était correcte, mais aussi, afin d'utiliser la PrincipalPermissionAttribute sur une méthode, vous devez d'abord faire les fenêtres principales du courant principal en appelant:

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal) 
5

La raison pour laquelle cela ne fonctionne pas dans WPF est que ces services sont implémentés dans la classe WindowsFormsApplicationBase de VB, qui n'est pas utilisée dans les applications WPF. Pour faire la même chose vous-même:

Appelez WindowsIdentity.GetCurrent() pour obtenir l'identité de l'utilisateur Windows. Vous pouvez obtenir le nom de ceci.

Si vous souhaitez définir spécifiquement l'unité d'exécution de threads comme le fait l'option Authentification VB Windows, appelez Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()) - c'est exactement ce que fait WindowsFormsApplicationBase en interne.

EDIT: Si vous préférez l'API My.User, il semble que vous devriez pouvoir faire la même chose en appelant le My.User.InitializeWithWindowsUser(). Je n'ai pas testé cela cependant.

Questions connexes