2016-04-15 10 views
2

Wir haben Front-End in AngularJS und Backend-APIs in NodeJs entwickelt. Wir verwenden Azure AD zur Authentifizierung. Frontend Angular verwendet die JavaScript-Bibliothek adal-angular für die azurblaue Authentifizierung. Wenn der Benutzer auf die Website kommt, wird er auf https://login.microsoftonline.com umgeleitet und bei erfolgreicher Authentifizierung wird er auf unsere Website weitergeleitet. So weit, ist es gut.
Ich muss Backend APIs mit passport-azure-ad Bibliothek schützen. Nur das Frontend ruft diese APIs auf. Es gibt zwei Strategien diese Bibliothek zur Verfügung mit
1> OAuth2Bearer Strategie
2> OIDCStrategy für Open ID ConnectPass-Azure-Ad: welche Strategie zu verwenden

ich standardmäßig unter Eindruck Azure AD war für die Authentifizierung OpenID Connect verwendet. Also plante ich OIDCStrategy verwenden Knoten Web-api als discussed here
jedoch in Fiedler Ich sehe die folgende Anfrage-Client (dh Winkel Frontend) macht zu schützen, wenn es Web-API

GET http://localhost:4030/api/getemployees HTTP/1.1 
Host: localhost:4030 
Connection: keep-alive 
Accept: application/json, text/plain, */* 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOi……………………… 
Referer: http://localhost:4030/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 

Hinweis Authorization-Tag mit beginnt ruft "Bearer" also nehme ich an, Client sendet Bearer Token an den Server.

Q
1> Welche Strategie sollte ich hier verwenden?
2> Wann sollten wir eine über der anderen verwenden?

Antwort

6

Ich pflege passport-azure-ad. Der Unterschied liegt hier zwischen "Autorisierung" und "Authentifizierung".

OAuth2 für die Autorisierung verwendet wird (muss ich den Zugriff auf diese haben?).

OpenID Connect wird für die Authentifizierung verwendet (das ist wer ich bin).

Wenn Sie auf dem Web-APIs verbinden, der Benutzer höchstwahrscheinlich bereits eine Identität (sie durch Authentifizierung sind) und jetzt wollen Sie gerade, um sicherzustellen, dass der Benutzer Zugriff auf die APIs hat (Genehmigung) . OAuth2 wird verwendet, um Ressourcen zu schützen und Token von einem IdP zu konsumieren, um sicherzustellen, dass Token gültig sind und der Benutzer Zugriff auf diese Ressource hat. Träger ist nur die Art von Token, die wir (und die Branche) für OAuth2 verwenden. Wenn jemand ohne einen Token zu Ihnen kommt, lehnen Sie ihn ab, und dann liegt es an dem Client, der Sie angerufen hat, um zu wissen, wohin Sie ihn bringen müssen, um das richtige Token zu erhalten, das Sie brauchen.

OpenID Connect baut auf OAuth2 auf und dient ausschließlich zum Anmelden von Personen und zum Abrufen der Token, die Sie anschließend an eine Web-API senden (die wiederum OAuth2 mit Bearer-Token verwenden würde). Daher wird OpenID Connect für Authentifizierung verwendet.

In Ihrem Szenario verwenden Sie Angular, das die OpenID Connect-Authentifizierung für Sie durchführt, , sodass Ihre Web-APIs die Bearer-Strategie verwenden sollten.

ich eine Probe geschrieben haben, die Sie durch alle diese hier geht: https://azure.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-webapi-nodejs/, dass der mittlere Stapel verwendet, und die eine iOS Beispielanwendung verwendet ich als Front-End geschrieben.Wenn man mit beiden spielt, ist es leicht zu sehen, wie man als Authentifizierungselement (iOS-App) agiert und das andere als Berechtigungsstück (die node.js-App) schützt

Code für Knoten. js App: https://github.com/Azure-Samples/active-directory-node-webapi

-Code für iOS App: https://github.com/Azure-Samples/active-directory-ios

Tiefer tauchen Sie ein in diese Themen hier: https://azure.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/

Lassen Sie mich wissen, wenn Sie Fragen haben!

+0

Das hat wirklich geholfen, die zu verwendende Strategie zu wählen. Allerdings verwendet "Pass-azure-ad" Bunyan. Ich verwende Visual Code für Entwicklung und Debugging. Meine Anwendung hört einfach auf zu starten, wenn ich über Visual Code laufe und das Problem war "Bunyan" und jemand, der bereits gepostet hat, stehe hier unter http://stackoverflow.com/questions/36089897/debugging-breaks-on-launch-with-bunyan- createlogger-node-v5-8 (Gibt es eine Umgehungslösung, ohne die Version von node.js zu aktualisieren? Ich verwende die Knotenversion 4.2.6) – LP13

+0

Ich bin froh, dass es geholfen hat. Kannst du als Antwort abstimmen? Zur Problemumgehung können Sie den Logger einfach aus der app.js-Datei löschen, und dadurch sollte er verschwinden. Interessant über 4.2.6 und Streams. –

+0

Danke !!. Es gibt keine Datei "app.js" im Knotenmodul "Pass-azure-ad". Es gibt die Datei oidcsetup.js, die die Logger-Instanz erstellt. aber wenn ich die Variable "log" lösche, dann wird das Modul fehlschlagen, egal wo das Modul die log.info() Methode benutzt. Beachten Sie, dass meine Anwendung Bunyan nicht verwendet, also habe ich keine Referenz in meiner Anwendung. Welche app.js-Datei hast du erwähnt? – LP13