Das ist eine interessante Frage, die Sie gestellt haben. Ich weiß, dass Microsoft aus irgendeinem Grund dieses "Windows Identity Foundation" Framework ohne viel Dokumentation veröffentlicht hat. Ich weiß das, weil ich beauftragt wurde, herauszufinden, wie man es mit einem neuen Projekt verwendet und es in die bestehende Infrastruktur integriert. Ich suche seit Monaten im Web nach guten Informationen.
Ich habe einen etwas anderen Blickwinkel genommen, um das von Ihnen beschriebene Problem zu lösen.
Ich nahm eine vorhandene Anmeldung-Anwendung und integriert Microsoft WIF-Installation in es. Damit meine ich, dass ich eine Anwendung habe, in der sich ein Benutzer anmeldet. Die Anmeldeanwendung übermittelt die vom Benutzer angegebenen Anmeldeinformationen an einen anderen Server, der die Benutzeridentität zurückgibt (oder einen Anmeldefehler anzeigt).
auf einige Beispiele von Microsoft Sehen, ich sehe, dass sie wie folgt vor: eine SignInRequestMessage
von einem Abfragezeichenfolgeflag Construct (durch eine vertrauende Anwendung generiert), ein Sicherheitstoken-Service aus einer benutzerdefinierten Klasse konstruieren und schließlich FederatedSecurityTokenServiceOperations nennen. ProcessSignInsert mit der aktuellen httpcontext.response. Leider kann ich es hier nicht wirklich erklären; Sie müssen sich wirklich die Code-Beispiele ansehen.
Ein Teil meines Codes ist dem Codebeispiel sehr ähnlich. In der GetOutputClaimsIdentity
werden Sie daran interessiert sein, eine Menge Ihrer eigenen Logik zu implementieren. Dies ist die Funktion, die die Anspruchsidentität erstellt, die den angemeldeten Benutzer beschreibt.
Nun, hier ist, was ich denke du bist wirklich daran interessiert zu wissen. Dies sagt Microsoft nicht in seiner Dokumentation AFAIK.
Sobald sich der Benutzer anmeldet, werden sie zurück zur vertrauenden Anwendung geleitet. Unabhängig davon, wie die Anmeldeanwendung funktioniert, senden die WIF-Klassen eine Antwort an den Browser des Benutzers, die eine "versteckte" HTML-Eingabe enthält, die das Tokensignaturzertifikat und die Ansprüche des Benutzers enthält. (Die Ansprüche werden im Klartext). Am Ende dieser Antwort finden Sie eine Weiterleitung zu Ihrer vertrauenden Website.Ich weiß nur über diese Aktion, weil ich es mit "Fiddler"
erfasst habe Wenn die WIF-Klassen wieder auf der Website der vertrauenden Partei zurück sind, werden sie die Antwort behandeln (bevor Ihr Code ausgeführt wird). Das Zertifikat wird validiert. Wenn Sie die Website Ihrer vertrauenden Seite mit FedUtil.exe eingerichtet haben (durch Klicken auf "STS-Verweis in Ihrer vertrauenden Anwendung von Visual Studio aus hinzufügen), überprüft die Klasse von Microsoft standardmäßig den Fingerabdruck des Zertifikats.
Endlich WIF Framework setzt Cookies im Browser des Benutzers (In meiner Erfahrung beginnen die Cookie-Namen mit "FedAuth"), die die Ansprüche des Benutzers enthalten. Die Cookies sind nicht lesbar.
Sobald das passiert, können Sie optional Operationen ausführen die Ansprüche des Nutzers innerhalb der Website der vertrauenden Seite unter Verwendung der ClaimsAuthenticationClass
. Hier wird Ihr Code wieder ausgeführt.
Ich weiß, das ist anders als das, was Sie beschreiben, aber ich habe dieses Setup funktioniert. Ich hoffe das hilft!
ps. Überprüfen Sie die anderen Fragen, die ich zu Windows Identity Foundation gestellt habe.
UPDATE: die URL ist
Eine Sache, die ich zu den STS, dass die Umleitung links aus Log-on-Anwendung über eine Umleitung mit einem Abfrage-String geschieht enthalten: Zur Frage unten in Kommentar antworten die Anwendung, bei der sich der Benutzer anmeldet. Diese Umleitung erfolgt automatisch, wenn ein Benutzer zum ersten Mal auf eine Seite zugreift, die eine Authentifizierung erfordert. Alternativ glaube ich, dass Sie die Umleitung manuell mit dem WSFederationAuthentication
Modul durchführen können.
Ich habe nie versucht, dies zu tun, aber wenn Sie eine Login-Seite in der Anwendung selbst nutzen wollen, glaube ich, der Rahmen sollte es Ihnen ermöglichen, die folgenden zu verwenden:
1) kapseln Ihre STS Code in einer Bibliothek. 2) Verweisen Sie die Bibliothek von Ihrer Anwendung. 3) Erstellen Sie eine Anmeldeseite in Ihrer Anwendung. Stellen Sie sicher, dass für diese Seite keine Authentifizierung erforderlich ist. 4) Stellen Sie den Emittenten Eigenschaft des wsFederation
Element innerhalb des Microsoft.IdentityModel
Abschnitt Ihrer web.config zur Anmeldeseite.
danke Eugenio, ich dachte, ich würde den Claims Identity Guide lesen, offensichtlich nicht, weil ich verpasste, dass Fabrikam eine MVC-Anwendung war. Ich werde es mir nochmal ansehen. Ich habe mir auch den Blog von Dominick Baier angeschaut und denke, dass das, was ich möchte, ein Aufruf einer aktiven M von dem Webserver auf der Anmeldeseite ist. –
Ich sehe nicht, dass die Verwendung von WIF in ASP.net MVC ist anders als die Verwendung von ASP.net-Formulare. –
Die Prinzipien sind genau gleich. Es gibt nur ein paar Implementierungsdetails. Die häufigsten Unterschiede sind: - In einer Webforms-App verlassen Sie sich normalerweise auf WIF für den gesamten Protokollaustausch (passivRedirectEnable = true). In einer MVC-App werden Sie das deaktivieren und programmgesteuert behandeln, wie in meinem Blogbeitrag beschrieben. - In einer MVC-Anwendung implementieren Sie normalerweise ein IAuthorizationFilter-Attribut. In Webformularen gibt es das nicht und Sie verlassen sich einfach auf den vorhandenen ASP.NET-Autorisierungsmechanismus (oder rufen Sie IsInRole usw. auf) –