2010-12-10 11 views
0

Ich möchte Remoteadministratoren (mit lokalen oder Domänenanmeldeinformationen) meinen Windows-Dienst über eine WCF-TCP-Bindung steuern lassen. Dazu muss ich den Remotebenutzer als Administrator authentifizieren. Ich kann die Hauptbenutzer/Rollen überprüfen, aber ich weiß nicht, wie ich den entfernten Benutzer nach den korrekten Benutzerdetails/Token fragen soll.Eingeschränkter Remote-WCF-Dienst: Windows-Authentifizierungsaufforderung

Dies ist mit meiner vorherigen Frage auf Restricting WCF TCP endpoint to Administrators verwandt. Statt [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")] meiner eingeschränkten Service-Methode des Hinzufügens und SecurityException fangen, so scheint es, ich kann es überprüfen:

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

Wie kann ich den Remote-Benutzer für die Windows-Authentifizierung fragt, ob ein Zugriff verweigert Ergebnis zurückgegeben wurde, so kann ich die Verbindung als ein anderes Prinzip neu initiieren?

Natürlich müsste die Änderung auf der Client-Anwendung des Remote-Benutzers vorgenommen werden. Vielleicht gibt es eine sauberere WCF-Möglichkeit, es zu tun?


Edit: Suche nach ".net Identitätswechsel" führte mich zu this auf Codeproject. Ich hatte keine Gelegenheit zu schauen, aber das könnte der richtige Weg sein.

Antwort

1

Sie müssen die Anmeldeinformationen des Benutzers mit Ihrem WCF-Anruf übergeben. Normalerweise erfasst die Clientanwendung nur die Anmeldeinformationen des aktuell ausgeführten Benutzers. Alternativ können Sie einen Benutzernamen und ein Passwort explizit angeben. So könnten Sie den Benutzer nach einem alternativen Satz von Anmeldeinformationen fragen, wenn Sie möchten.

In beiden Fällen muss die Client-App den Benutzer auffordern. Ihr WCF-Aufruf sollte nach einem Autorisierungsfehler einen Fehler (Code oder Ausnahme) zurückgeben, und Ihr Client sollte diese Rückgabe erfassen und eine Aufforderung für den Benutzer anzeigen und die neuen Anmeldeinformationen erneut versuchen. WCF selbst kann den Benutzer nicht zur Eingabe auffordern.

Hier ein Artikel über verschiedene Mittel zur Weitergabe Anmeldeinformationen ist:
http://blogs.msdn.com/b/sonuarora/archive/2007/04/21/setting-client-credentials.aspx

+0

Danke. [Diese Frage] (http://stackoverflow.com/questions/1596161/how-to-show-authentication-dialog-in-cre-net-3-5-sp1) bietet eine native Eingabeaufforderung, wenn auch mit einem alten Aussehen. –

0

Vorausgesetzt, dass dies in IIS gehostet wird, müssen Sie die Anonymous-Authentifizierung im IIS-Manager deaktivieren. Dies sollte den Benutzer zwingen, sich mit einem Windows-Konto am Computer anzumelden. Möglicherweise müssen Sie ASP.NET-Identitätswechsel auch aktivieren.

+0

Nein, es ist ein Windows-Dienst und den Client ist eine Windows Forms-Anwendung. Daher kein IIS. –