2017-08-09 1 views
1

Ich versuche, ein SAML-Token zu erfassen, das mir mein ADFS-Login gibt. Ich muss die SAML erfassen, indem ich zur Anmeldeseite von ADFS navigiere. Lassen Sie den Benutzer sich anmelden und wenn die Anmeldung erfolgreich ist, geben Sie die SAML zurück an die Anwendung. Die Anwendung ruft einen WCF-Dienst auf, der das SAML-Token in der Kopfzeile übergibt. Ich habe eine Url wie:So öffnen Sie einen ADFS-Anmeldebildschirm und erfassen die SAML

https://adfs.mydomain/adfs/ls/IdpInitiatedSignOn.aspx?RedirectToIdentityProvider=http://adfs.mydomain/adfs/services/trust&loginToRP=https://bcjbsj.com/client-api/api/saml 

Ich muss diese Arbeit in eine Windows-Anwendung oder eine Konsolenanwendung verdorren. Wenn dies nicht möglich ist, kann ich eine ASP.NET-Anwendung auch zum Testen erstellen. Ich bin durch viele Links gegangen, konnte aber nichts finden, was hilft.

Ich kann hier etwas fehlen. Ganz neu bei der Authentifizierung. Jede Hilfe oder Hinweise wären hilfreich.

Antwort

1

Dies ist leicht mit einer Technik (gelegentlich) namens JavascriptNotify erreicht. Die Grundidee besteht darin, ein Steuerelement WebBrowser anzuzeigen, das Sie über JavaScript erweitern, um nach Abschluss der Authentifizierung Rückrufe zu Ihrem App-Code zu ermöglichen. Sie müssen entweder einen SP-STS, der die Home-Realm-Erkennungsseite und die endgültige jsnotify-Seite enthält, entweder zentral oder als Paket mit Ihrer App bereitstellen. Der Rest der Benutzeroberfläche wird von den vertrauenswürdigen STS verarbeitet. Sie können Azure ACS optional verwenden, um diese Rolle zu füllen.

Siehe Authenticating Users from Passive IPs in Rich Client Apps – via ACS oder Access Control Service: Transitioning between Active and Passive Scenarios für wie die Ruffolge aussieht.

Call sequence showing Azure ACS being used to authenticate from a desktop client

Um zu verstehen, wie die erforderlichen window.external Methoden hinzufügen, finden Sie Invoke C# code from JavaScript in a Document in a WebBrowser. Thinktecture has an example client in WPF, das javascriptnotify mit JST implementiert.


Wie @Thuan erwähnt, wäre die andere Option, WS-Federation zugunsten von WS-Trust aktiven Authentifizierung passive Authentifizierung zu verzichten. Der Nachteil bei diesem Ansatz besteht darin, dass er weitaus weniger flexibel ist und Sie die clientseitige Benutzeroberfläche selbst implementieren müssen. Nachdem ich Apps geschrieben habe, die sowohl WS-Trust- als auch WS-Fed-RPs enthalten, empfehle ich die passive Authentifizierung per WS-Fed sogar für Desktop-Apps.

+0

Das ist wirklich genial: D Ich bin so an den Ansatz für Enterprise-Rich-Client-Anwendungen gewöhnt, die ich nicht bemerkte, dass diese "fließt" :) lernte etwas Neues. – Thuan

0

Dieser Endpunkt wird für Szenarien mit passivem Login (auch als Browser bezeichnet) verwendet. Für Windows-Anwendungen oder -Konsolen ist WS-Trust ein geeigneterer Ansatz. Kurz gesagt, Ihre Anwendung verwendet das WS-Trust-Protokoll, um ADFS aufzurufen, um ein Token zu erhalten, das für den Zugriff auf einen WCF-Dienst verwendet werden kann. Solch ein WCF-Dienst wird auf Anspruch basierender Dienst oder Anspruch unterstützender Dienst genannt. Diese Frage hat eine Reihe von guten Links: WCF, Claims, ADFS 3.0