2010-12-10 29 views
0

Je souhaite laisser les administrateurs distants (avec des informations d'identification locales ou de domaine) contrôler mon service Windows via une liaison TCP WCF. Pour ce faire, j'ai besoin d'authentifier l'utilisateur distant en tant qu'administrateur. Je peux vérifier l'utilisateur principal/rôles, mais je ne sais pas comment inviter l'utilisateur distant pour les détails d'utilisateur/jeton correct.Service WCF distant restreint: invite d'authentification Windows

Ceci est lié à ma précédente question sur Restricting WCF TCP endpoint to Administrators. Au lieu d'ajouter [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")] à ma méthode de service restreint et attraper un SecurityException, il semble que je peux vérifier avec:

if (!System.Threading.Thread.CurrentPrincipal.IsInRole("Administrators")) 
    return MethodResult.AccessDenied; 
// haven't tested if it's the service thread or the remote user yet. 

Comment puis-je soufflerai si un résultat Refusé d'accès a été retourné à l'utilisateur distant pour l'authentification Windows si je peux Réinitialiser la connexion en tant que principal différent?

Bien sûr, la modification devrait être effectuée sur l'application client de l'utilisateur distant. Peut-être y a-t-il un moyen plus propre pour la WCF de le faire?


Edit: Recherche de ".net l'usurpation d'identité" m'a amené à this sur CodeProject. Je n'ai pas eu l'occasion de regarder, mais c'est peut-être le chemin à parcourir.

Répondre

1

Vous devez transmettre les informations d'identification de l'utilisateur avec votre appel WCF. Normalement, l'application cliente «capture» uniquement les informations d'identification de l'utilisateur en cours d'exécution. Vous pouvez également spécifier un nom d'utilisateur et un mot de passe de manière explicite. Ainsi, vous pouvez demander à l'utilisateur un autre jeu d'informations d'identification si vous le souhaitez.

De toute façon, l'application cliente doit inviter l'utilisateur. Votre appel WCF doit renvoyer une erreur (code ou exception) lors de l'échec de l'autorisation et votre client doit capturer ce retour et afficher une invite à l'utilisateur et réessayer avec les nouvelles informations d'identification. WCF en lui-même ne peut pas gérer invite l'utilisateur.

Voici un article sur divers moyens des pouvoirs de passage:
http://blogs.msdn.com/b/sonuarora/archive/2007/04/21/setting-client-credentials.aspx

+0

Merci. [Cette question] (http://stackoverflow.com/questions/1596161/how-to-show-authentication-dialog-in-c-net-3-5-sp1) fournit une invite native, mais avec un aspect ancien. –

0

En supposant que cela soit hébergé dans IIS, vous devez désactiver l'authentification anonymouse dans le Gestionnaire des services Internet. Cela devrait forcer l'utilisateur à se connecter à la machine en utilisant un compte Windows. Vous devrez peut-être également activer l'emprunt d'identité ASP.NET.

+0

Non, c'est un service Windows et le client est une application Windows Forms. Par conséquent, pas d'IIS. –