4 Stimmen

WCF-Authentifizierungsdienst

Ich bin relativ neu in der WCF-Welt so meine applogies für die Newbie-Frage. Ich bin gerade dabei, eine Schicht von WCF-Diensten zu entwerfen. Einer von ihnen ist ein Authentifizierungsdienst, so kam ich mit dem folgenden Authentifizierungsmechanismus:

IUserService.TryAuthenticateUser(string username, string password, out string key)

Grundsätzlich versucht der Benutzer, sich zu authentifizieren, und wenn er erfolgreich ist, erhält er einen Sitzungsschlüssel/Sicherheitsschlüssel/was auch immer... der Schlüssel wird dann für jede andere "WCF-Aktion" benötigt, z. B.

IService.GiveMeMyFeatures(string key);
IService.Method1(string key);

Dieser Mechanismus sieht extrem intuitiv für mich und ist auch sehr einfach zu implementieren, so was stört mich ist, warum ich nicht ähnliche WCF Beispiele finden? Dieser eindeutige Schlüssel (der praktisch ein Sitzungsschlüssel mit wcf-seitigem Ablauf und allem ist) kann dann von den verschiedenen Anwendungen verwendet werden, je nach Architektur der Anwendung: für ASP.NEt kann er in einem Cookie gespeichert werden, für Winform/WPF/Mobile kann er in der Form-Klasse in einem Feld gespeichert werden und so weiter...

Jetzt kommt Frage Nummer 1: Was halten Sie von dieser Methode?

Ich habe auch gelesen, dass ich die eingebauten ASP.NET-Authentifizierungsdienste (mit Mitgliedschaftsanbietern usw... wenn ich richtig verstanden habe) verwenden kann. Aus architektonischer Sicht gefällt mir diese Methode nicht wirklich, da bei der Authentifizierung von einer ASP.NET-Seite der Arbeitsablauf wie folgt aussehen wird: ASP.NET -> WCF -> ASP.NET-Authentifizierungsdienst -> Antwort

In diesem Szenario könnte man auch die WCF-Schicht umgehen und die Methoden des Authentifizierungsdienstes direkt von der Asp.net-Seite aus aufrufen. Ich weiß, dass ich durch die WCF-Schicht für jede Authentifizierungsanforderung etwas Leistung verliere, aber es ist wichtig für mich, eine schöne, geschichtete Architektur zu haben...

Und hier ist Frage Nummer 2: Was sind die Vor- und Nachteile dieser Methode gegenüber der ersten, und warum ist sie so beliebt, obwohl sie aus Sicht der Architektur irgendwie falsch ist?

Ich habe auch gelesen, dass ich für jeden WCF-Methodenaufruf Benutzeranmeldeinformationen senden und den eingebauten Mechanismus zur Authentifizierung und ordnungsgemäßen Beantwortung der Anforderung verwenden kann.

F3: Was halten Sie von dieser Methode?

Und um zusammenzufassen - offensichtlich gibt es viele Authentifizierungsmethoden, aber welche denken Sie ist am besten und die meisten generischen (wenn man bedenkt, dass die WCF-Dienste von asp.net/wpf/mobile/etc... aufgerufen werden)?

Vielen Dank im Voraus :)

5voto

blowdart Punkte 53842

Der Grund dafür, dass Sie keine Beispiele finden können, ist, dass es sich nicht um eine Best Practice handelt - es wird etwas, das zustandslos sein sollte, nämlich Webdienste, in etwas Zuständiges verwandelt, und zwar etwas, das keinen guten Lastausgleich bietet.

Da Webdienste bereits über Standard-Benutzernamen und -Passwörter verfügen, die von fast jedem SOAP-Stack (außer Silverlight) unterstützt werden, ist dies der richtige Weg. Sie können das standardmäßige rollenbasierte Sicherheitsmodell von .NET verwenden, um Ihre Methoden auch mit diesem Ansatz zu schützen.

1 Stimmen

+1 - Am besten ist es, wenn Sie das "Per-Call"-Szenario verwenden - jeder Anruf wird vom vorherigen getrennt, und zwischen den Anrufen wird nichts ausgetauscht.

0 Stimmen

Hm, ich glaube, ich habe es falsch erklärt. Ich möchte keine Informationen zwischen Anrufen austauschen, ich möchte nur sicherstellen, dass die Anrufe von einem gültigen Benutzer kommen. Ich mag die Idee nicht, das Passwort jedes Mal über die Leitung zu senden, deshalb habe ich das Konzept des "abstrakten" Schlüssels entwickelt... Ich habe die Idee ein wenig verbessert - ich verwende immer noch den UserService, um einen Schlüssel aus dem Benutzernamen und dem Passwort zu erhalten, aber anstatt den Schlüssel als Parameter an jede wcf-Methode zu übergeben, verwende ich einfach benutzerdefinierte Anmeldeinformationen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X