2015-05-28 4 views
7

Ich habe eine Azure-Webanwendung, die ihre Benutzer über Azure AD verwaltet. Ich möchte, dass sich die Benutzer in meinem Azure AD-Verzeichnis registrieren können, um ein Konto zu erstellen (Self-Service). Daher habe ich der App Lese- und Schreibzugriff auf das Verzeichnis erteilt und eine Seite mit der Graph-API zum Erstellen der Benutzer eingerichtet.Azure AD Multitenant-Berechtigungen

Bis hier ist alles super. Aber das Problem, das ich jetzt habe, ist, dass ich Multi-Tenancy aktivieren möchte, damit Benutzer von externen AD-Verzeichnissen sich in meine App einloggen können. Das funktioniert, aber ich muss mich als Administrator für das Konto anmelden, da es auch Lese-/Schreibzugriff auf deren Verzeichnis fordert.

Gibt es eine Möglichkeit, das zu beheben? Ich möchte nur Lese-Schreib-Zugriff auf mein Verzeichnis, um Benutzerkonten erstellen zu können. Ich möchte nicht um Erlaubnis bitten, ihr Verzeichnis zu berühren, da sie meiner App höchstwahrscheinlich nicht vertrauen würden.

Danke.

+0

Die kurze Antwort ist nein, können Sie nicht. Azure hat Möglichkeiten, AD 1 mit AD 2 zu integrieren, aber das ist mit 2 spezifischen Domänen, nicht mit "alles da draußen". Sie können jedoch ein anderes AD als Authentifizierungssystem eines Drittanbieters verwenden und trotzdem einen lokalen Benutzer erstellen, über den Sie Administratorrechte haben. –

Antwort

2

Ich fand eine schnelle und schmutzige Lösung: Fügen Sie eine andere Anwendung zum Active Directory hinzu. Diese App sollte Single Tenant sein und nur über die Berechtigung zum Lesen und Schreiben des Active Directory verfügen. Wir können die Anmeldeinformationen dieser App verwenden, um auf die Graph-API und die Anmeldeinformationen der anderen Anwendung zuzugreifen, um Benutzer zu authentifizieren.

ich abwarten, ob jemand eine bessere Lösung für dieses Szenario hat ...

+2

Das ist wirklich der einzige Weg. Sie ehren andere Azure ADs, erstellen aber einen lokalen "Benutzer" in Ihrem eigenen "Raum", den Sie "verwalten" können. Es ist nicht wirklich eine schmutzige Lösung. Es ist der etablierte Workflow für die Verwendung aller Authentifizierungen von Drittanbietern. Wenn Sie Google Plus OAuth berücksichtigen, erwarten Sie nicht, dass Sie den Google-Nutzer verwalten.Sie erstellen eine lokale Entität mit der Google-Identität als lokale Identität und verwalten den lokalen Nutzer. –

0

sorry für die späte Antwort hier. Im Allgemeinen erfordert eine Operation zum Erstellen von Objekten in einem Verzeichnis (wie Benutzer) Administratorberechtigungen. Außerdem sieht es so aus, als ob die Web-App, die Sie erstellen, App-only-Berechtigungen verwendet, für die die Zustimmung des Administrators erforderlich ist. Im Multi-Tenant-Fall muss der Administrator des zustimmenden Mieters derjenige sein, der dieser Art von App zustimmt - nur jemand in dieser Rolle ist wirklich berechtigt, die Zustimmung für diese Zugriffsebene zu erteilen.

Hoffe, dass die hilft,

+0

Ich bin mir auch nicht sicher, ob ich Ihr Szenario (oder die schnelle und schmutzige Lösung, über die Sie hier sprechen) vollständig verstehe. Es scheint, als ob Sie eine Website für die delegierte Benutzerverwaltung erstellen. Ist die Idee, dass mehrere Organisationen diese App in ihrem Mieter verwenden können? –

+0

Wir möchten azurblaue Anzeige für alle Authentifizierung verwenden. Wenn der Benutzer sein eigenes AzureAD (Office 365, ...) hat, kann er damit ein Konto in unserer Anwendung erstellen. Wenn nicht, kann er ein Konto in unserem AzureAD erstellen ... Aber ich möchte nicht um Zustimmung bitten, die anderen AzureAD-Verzeichnisse zu berühren, nur um diese Benutzer zu erstellen. Hoffe das klärt ein bisschen auf ... –

0

Keine Notwendigkeit, eine sekundäre App anstelle der Authentifizierungsrolle verwenden - - es kann einige eigenartige Nebenwirkungen auf den authentifizierten Benutzer sowieso wie Fremd/unvollständig Protokollierung Rolle Inkonsistenzen und fehlendes System/interne Referenzen.

Was verwenden Sie für Anmeldedaten für Ihre App (TenantID etc.)? AD ist sehr streng in der Verwaltung von Anmeldeinformationen, also würde ich zurück zur App-Struktur gehen.

Auf der Abfrageebene können Sie alle Tabellen ohne gemeinsame Datenbanktabellen vollständig separieren und eine mandantenfähige Bezeichnerspalte einfügen, so dass niemand eine SQL-Injektion durchführen kann, wenn Sie die mandantenfähige ID als explizite Variable angeben.

Dann könnten Sie in einem Entitätsmodell eine mandantenfähige Schnittstelle für alle erben, die auf die Mandantenbezeichner (als Teil von EF) verweisen.

Auf diese Weise wird die Belastung für OAuth oder andere Bibliotheken isoliert, um sich um die Authentifizierung durch Dritte zu kümmern.