2009-12-07 6 views
5

Ich erstelle eine Website, die sowohl ASP.NET-Seiten als auch ein Flash-Applet enthält. Ich möchte meine Geschäftslogik in einen WCF-Dienst einbetten, der über zwei Endpunkte verfügbar ist: Einen, der über das Internet über HTTP (S) für den Flash-Client zugänglich ist und einen, der im Rechenzentrum für die Anwendungsserver zugänglich ist . Wenn dies nicht als eine gute Annäherung erscheint, dann halte mich auf. Ansonsten gehe ich weiter ...Token-basierte Authentifizierung in WCF

Die Frage ist, wie man Anfragen aus dem Flash-Client authentifizieren. Da ich das Passwort des Benutzers nicht in einem Browser-Cookie speichern möchte, möchte ich das Passwort nicht bei jeder Anfrage senden und möchte HTTPS nach der ersten Anmeldung nicht verwenden, sondern einen Token verwenden. basiertes Authentifizierungssystem. Ich möchte auch nicht, dass sich der Benutzer beim Flash-Client anmelden muss, nachdem er sich bereits auf der Site selbst angemeldet hat. Daher plane ich die Verwendung von Javascript, um das Token beim Start an den Flash-Client zu übergeben.

Ich weiß, dass WCF das integrierte Sicherheitsframework (System.Security) von .NET Framework unterstützt, um die Zugriffssteuerung zu erzwingen, und ich möchte dies nutzen. Die Frage lautet dann: Wie gebe ich das Token an den WCF-Dienst, wenn es von Flash aufgerufen wird, und wie verarbeite ich das Token auf dem Server?

  • WCF hat einen „ausgegeben Token“ Authentifizierungs-Modus, aber es scheint, soll dies mit einer Secure Token Service und SAML-Token in einem ausgewachsenen Föderation Szenario verwendet werden - ein wenig mehr Komplexität, die mich wirklich wollen. Es ist möglich, diesen Modus mit meinen eigenen "einfachen zufälligen" Zeichen zu verwenden? Wenn das so ist, wie? Beachten Sie, dass dies mit Flash kompatibel sein muss.
  • Ich könnte möglicherweise das Token in einem Header übergeben (entweder ein SOAP-Header oder ein HTTP-Header). Wenn ich in diesem Fall festgestellt habe, welcher Benutzer die Anfrage bearbeitet, wie informiere ich das Framework, damit die System.Security-Prüfungen funktionieren?
  • Gibt es insgesamt einen anderen Ansatz, den ich berücksichtigen sollte? Alles, was verhindert, Passwörter in jeder Anfrage zu senden, lässt mich System.Security verwenden, und die Arbeit mit Flash ist eine Möglichkeit.
+0

Aaron, haben Sie jemals einen einfachen Weg gefunden, dies zu tun? Ich versuche, eine einfache Token-basierte Authentifizierung in WCF zu machen, und es scheint viel schwieriger als es sollte. – technophile

+0

Ich landete im Grunde mein eigenes.Ich habe einen WCF-Endpunkt, der Token ausgibt - er nimmt einen Benutzernamen und ein Passwort, überprüft sie und antwortet mit dem Token, was in meinem Fall einfach eine zufällige Zeichenfolge ist. Die eigentlichen Geschäftslogikmethoden befinden sich auf einem anderen Endpunkt, der über einen benutzerdefinierten Nachrichteninspektor verfügt, der einen benutzerdefinierten Header liest, der das Token enthält. Auf dem Client fügt ein anderer Nachrichteninspektor den Header zu ausgehenden Nachrichten hinzu. Es ist mehr Arbeit, als ich gerne getan hätte, aber es scheint gut zu funktionieren. – Aaron

Antwort

2

Wie es die ursprüngliche Frage scheint beantwortet wurde ich diese kurzen halten würde, aber ein Ansatz wäre in der Tat sein, um die Authentifizierungs-Token in einem HTTP-Header zu übergeben und überschreibt CheckAccess(OperationContext operationContext, ref Message message) in einem benutzerdefinierten ServiceAuthorizationManager.

Sie haben den Dienst zuvor so konfiguriert, dass er eine benutzerdefinierte Richtlinie verwendet, die IAuthorizationPolicy implementiert.

Es müssen lediglich die Klassen IIdentity und IPrincipal implementiert werden, um den Autorisierungsstatus zu speichern.

Eine Reihe von guten Artikeln existiert zu diesem Thema:

http://msdn.microsoft.com/en-us/library/system.identitymodel.policy.iauthorizationpolicy.aspx

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

Ich denke, das immer noch wie eine "roll-your-own" Lösung fühlen kann, aber sein zumindest beruhigend wenn du einem festgelegten Muster folgst. Es hat den Vorteil, dass Sie Ihren Autorisierungscode von Ihren Servicemethoden schwarz einpacken.

Verwandte Themen