2013-09-25 10 views
8

Ich schreibe eine ziemlich große Anwendung, mit einem HTML/CSS/JS-Frontend, mit AngularJS und einer ASP.NET MVC Web API als Backend.Lassen Sie eine reine HTML/CSS/JS SPA-Anwendung den Benutzer nach seinem Benutzernamen/Passwort fragen und übergeben Sie ihn an ADFS?

Ich möchte, dass Benutzer authentifizieren können, ich ThinkTecture AuthorizationServer auf einem separaten Computer installiert habe und eine ADFS-Instanz auf dem Domänencontroller ausgeführt wird. Momentan verwende ich die mit ADFS gelieferte Webseite für die Anmeldung, aber es wäre schön, wenn ich meine eigene Seite benutzen könnte, die nach dem Benutzernamen/Passwort Combo fragt, sie an AuthorizationServer/ADFS weitergibt, und dann einfach die Authentifizierungs-Token danach.

Hat jemand etwas ähnliches getan?

Grüße, Daníel

+0

Haben Sie eine Problemumgehung für Ihr Problem? Bitte teilen Sie Ihre Lösung, da ich ein ähnliches Problem lösen muss. –

+0

Ich habe folgendes getan: - hinzugefügt einen/login Endpunkt zu meiner API, die der Benutzer kann POST (über SSL, also Benutzername/Passwort werden nicht im Klartext gesendet) - Verwendet die Bibliothek Thinktecture.IdentityModel in meiner API Projekt, um eine Verbindung mit AuthorizationServer herzustellen (mithilfe von Code Flow). Der Code sieht wie folgt aus: ' \t var client = new OAuth2Client ( \t \t neue Uri (Endpunkt), \t \t clientId, Geheimnis); \t LoginResponse response = null; \t AccessTokenResponse tokenResponse = null; \t versuchen \t { \t \t tokenResponse = client.RequestAccessTokenUserName (data.user, data.pass, "lesen"); \t} \t catch (Exception ex) \t { \t \t \t} ' Es funktioniert ... – dabs

+0

Sorry über die Formatierung, es wurde ein wenig aus der Hand ... – dabs

Antwort

3

In der Tat Benutzer, den Sie in Ihrem SPA einzuloggen werden dann Sie eine Server-Seite haben (Java oder .NET oder *), der diese Anforderung erhalten.

Der Server fragt das Token an ADFS, ADFS sendet das Token und Ihr Server übergibt das Token an AngularJS in der Antwort über einen Cookie.

In Angular Seite nichts zu tun, um ein http-Interceptor erwartet, dass der Status der Antwort (401.403) überprüfen ...

Das Cookie wird von AngularJS in jeder Anforderung automatisch erneut gesendet werden, wenn Sie wissen wollen, wie eine implementiert htppInterceptor auf AngularJS nur überprüfen:

AngularJs -.net MVC WebApi Authentication example

In diesem Thread ich erklären, wie zu diesem Schritt implementiert.

Wie auch immer: Ihr SPA ist ein RIA ok, aber immer noch der Client Teil einer Webapp. Ich denke nicht, dass es wirklich gut ist (ich denke, es ist wirklich schlimm), dass der Kunde sich direkt mit dem ADFS in Verbindung setzt ... Wie kann Man-In-The-Middle verhindert werden, wenn man das tut?

+0

Klingt interessant. Wäre das Web-API-Projekt in der Lage, die Anmeldeanforderung zu bearbeiten? – dabs

+0

Für mich ist es nicht wirklich der Standard, aber die Login-Seite ist eine klassische MVC-Seite, wenn Sie in SPA eingeloggt sind! –

+0

Wie auch immer ich kann Sie ein Beispiel mit dem Login auf der SPA-Seite, wenn Sie wollen –