2015-02-18 7 views
13

Ich habe eine REST-API in C# geschrieben und muss mich mit einem vorhandenen Azure AD-Dienst authentifizieren. Ich habe derzeit den Benutzernamen und das Passwort des Benutzers, der sich authentifizieren möchte. Ich muss mich bei Azure AD authentifizieren und ein Zugriffstoken vom Server erhalten.Wie authentifizieren Sie Benutzer mit Azure Active Directory mithilfe von OAuth 2.0?

Kann mir bitte jemand in die Richtung einiger Artikel/Tutorials zeigen, die erklären, wie man das macht?

+5

Sie meinen, wie OAuth verwenden 2.0 mit Azure ANZEIGE? Der Call-by-Call-Prozess ist [hier] beschrieben (https://msdn.microsoft.com/en-us/library/azure/dn645543.aspx). Die [Azure AD Authentication Library] (https://msdn.microsoft.com/en-us/library/azure/jj573266.aspx) vereinfacht diesen Prozess –

+0

Danke - das ist genau das, was ich brauchte – COBOL

+0

Die Tatsache, dass Sie erwähnen, die Benutzer Anmeldeinformationen macht mich nervös. Könnten Sie Ihrer Frage etwas mehr Detail hinzufügen? Ist das Szenario: native App -> Ihre REST-API -> Azure AD Rest-API. Oder ist es: Web App -> Ihre REST API -> Azure AD Rest API. Oder etwas anderes. Abhängig vom genauen Szenario kann ich Sie auf Stichproben hinweisen, die verhindern, dass Sie jemals mit den Anmeldeinformationen des Benutzers umgehen müssen, was aus Sicherheitsgründen viel sicherer wäre. –

Antwort

11

Sie sollten vermeiden, die Anmeldeinformationen des Benutzers zu behandeln. Beim Sammeln von Benutzeranmeldeinformationen, die durch die Verwendung von OAuth 2.0 oder OpenID Connect gemildert werden, treten schwerwiegende Sicherheitsrisiken auf, um ein Token zu erhalten, ohne die Anmeldeinformationen direkt zu verarbeiten. Wenn Sie über eine eigene Benutzeroberfläche für die Erfassung von Anmeldeinformationen verfügen, wird diese Anmeldung möglicherweise später fehlschlagen, wenn die Multi-Faktor-Authentifizierung aktiviert ist. In diesem Fall können weitere Informationen erforderlich sein, um den Benutzer zu authentifizieren, als Sie erfassen, z. B. ein einmaliges Kennwort. Wenn Sie zulassen, dass Azure AD die Authentifizierungserfahrung über OAuth 2.0 oder OpenID Connect darstellt, sind Sie von der verwendeten spezifischen Authentifizierungsmethode isoliert. Sammeln der Benutzer Azure AD-Anmeldeinformationen sind eine schlechte Übung, die nach Möglichkeit vermieden werden sollte.

Ich habe nicht genug Details über das genaue Szenario, um sicher zu sein, dass das folgende Beispiel gilt, aber es wird zumindest einen guten Ausgangspunkt bieten. In diesem Beispiel wird gezeigt, wie eine native App erstellt wird, die eine REST-API aufruft, die eine Azure-Ressource auf die sicherste Weise aufrufen kann.

https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet

Sie können hier viele andere Proben finden, die verwendet werden können, um eine Lösung für Ihr spezielles Szenario zu konstruieren.

https://github.com/AzureADSamples

Wenn Sie bieten etwas mehr Detail, das ich mehr spezifische Leitlinien geben kann.

+0

Hallo, ich habe eine Android-App, die über einen Benutzernamen und ein Passwort an meine REST-API sendet. Die REST-API muss dann überprüfen, ob diese Kombination aus Benutzername und Kennwort korrekt ist und einen vorhandenen Azure AD-Server verwendet. Wenn es korrekt ist, verarbeitet die REST-API die Generierung eines Zugriffstokens, das die App für die Kommunikation mit meiner REST-API verwendet. – COBOL

+2

Bitte vermeiden Sie den Benutzernamen und das Passwort. Überall, wo Sie den Benutzernamen und das Passwort behandeln, ist ein weiterer potenzieller Ort für das Benutzerkonto kompromittiert. Die von AAD zurückgegebenen Token sind auf einen bestimmten Bereich beschränkt.Wenn einer dieser Token kompromittiert wird, ist der Schweregrad der Kompromittierung erheblich geringer als ein kompromittiertes Benutzername-Passwort. Warum sammeln Sie das Benutzername-Passwort direkt? Kann das geändert werden? –

+0

Es gibt Compliance-bezogene Situationen, in denen Apps Anmeldedaten für eine Anfrage in App validieren müssen. Es scheint keinen Weg um diese zu geben, ohne Creds von der Client-App zu erwerben und dann mit Azure auf dem Server zu validieren (C# in der Client-App). – im1dermike

4

See: http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/

Zusammenfassung: erstellen UserCredential

UserCredential uc = new UserCredential(user, password); 

Anruf eines der AcquireToken() -Funktionen mit dem UserCredential

public AuthenticationResult AcquireToken(string resource, string clientId, UserCredential userCredential); 
public Task<AuthenticationResult> AcquireTokenAsync(string resource, string clientId, UserCredential userCredential); 
+0

Was ist Ressource? – kat1330

+1

@ ivan.petrovic ** Ressource: ** Der App ID URI der Web-API (gesicherte Ressource). Um den App ID-URI der Web-API zu finden, klicken Sie im Azure-Verwaltungsportal auf Active Directory, klicken Sie auf das Verzeichnis, klicken Sie auf die Anwendung und dann auf Konfigurieren. https://azure.microsoft.com/en-us/documentation/articles/active-directory-protocols-oauth-code/ – sandiejat

+0

Aus dem gleichen Artikel: Sie können nur diese Flüsse von einem ** nativen ** Client verwenden. Ein vertraulicher Client, z. B. eine Website, kann keine direkten Benutzeranmeldeinformationen verwenden. –

Verwandte Themen