2015-05-28 13 views
7

Possiedo una webapp di Azure che gestisce gli utenti tramite Azure AD. Voglio che gli utenti siano in grado di registrarsi nella directory di Azure AD per creare un account (self-service), quindi ho dato l'accesso in lettura-scrittura all'app e ho configurato una pagina utilizzando l'API Graph per creare gli utenti.Autorizzazioni multitenant di Azure AD

Fino a qui tutto è perfetto. Ma il problema che ho ora è che voglio abilitare il multi tenancy, così gli utenti di directory AD esterne possono accedere alla mia app. Funziona, ma devo accedere come amministratore per l'account perché richiede anche l'accesso in lettura e scrittura alla directory nella directory.

C'è un modo per risolvere questo problema? Voglio solo l'accesso in lettura e scrittura alla mia directory per poter creare account utente. Non voglio chiedere il permesso di toccare la loro directory perché, molto probabilmente, non si fiderebbero della mia app.

Grazie.

+0

La risposta breve è no, non è possibile. Azure ha modi per integrare AD 1 con AD 2, ma è con 2 domini specifici, non con "tutto là fuori". Tuttavia, puoi utilizzare un altro annuncio come autenticatore di terze parti e creare ancora un utente locale su cui hai eseguito l'amministrazione. –

risposta

2

Ho trovato una soluzione rapida e sporca: aggiungere un'altra app all'Active Directory. Questa app deve essere single tenant e avere solo il permesso di leggere e scrivere la directory attiva. Possiamo utilizzare le credenziali di questa app per accedere all'API Graph e alle credenziali dell'altro app per autenticare gli utenti.

Aspetto di vedere se qualcuno ha una soluzione migliore per questo scenario ...

+2

Questo è davvero l'unico modo. Stai onorando gli altri Azure AD ma crei un "utente" locale nel tuo "spazio" che puoi "gestire". Non è davvero una soluzione sporca. È il flusso di lavoro stabilito per l'utilizzo di tutte le autenticazioni di terze parti. Se rispetti Google Plus OAuth, non ti aspetti di gestire l'utente Google.Crei un'entità locale con Google Identity come identità locale e gestisci l'utente locale. –

0

dispiace per il ritardo di risposta qui. In generale, un'operazione per creare oggetti in una directory (come gli utenti) richiede le autorizzazioni di amministratore. Inoltre, sembra che l'app Web che stai creando utilizzi autorizzazioni solo per le app, che richiedono sicuramente il consenso dell'amministratore. Nel caso multi-tenant, l'amministratore dell'inquilino accondiscendente deve essere quello che acconsente a questo tipo di app: solo una persona in questo ruolo ha realmente l'autorità di concedere il consenso per questo livello di accesso.

Spero gli aiuti,

+0

Inoltre non sono sicuro di comprendere appieno il tuo scenario (o la soluzione rapida e sporca di cui stai parlando qui). Sembra che tu stia costruendo un sito Web per la gestione delegata degli utenti di qualche tipo? L'idea che più organizzazioni possono utilizzare questa app nei loro titolari? –

+0

Vogliamo utilizzare l'annuncio azzurro per tutte le autenticazioni. Se l'utente ha il proprio AzureAD (Office 365, ...) può utilizzarlo per creare un account nella nostra applicazione. In caso contrario, può creare un account nel nostro AzureAD ... Ma non voglio chiedere il consenso per toccare le altre directory di AzureAD, solo le mie per creare questi utenti. Spero che questo chiarisca un po 'lo scenario ... –

0

Non c'è bisogno di utilizzare un'applicazione secondaria al posto del ruolo di autenticazione - - ci possono essere alcuni effetti collaterali particolari sulla autenticazione utente in ogni caso come estranee logging/incompleta, incongruenze di ruolo, e sistema mancante/riferimenti interni.

Che cosa stai utilizzando per le credenziali di accesso per la tua app (TenantID ecc.)? AD è molto rigido nella gestione delle credenziali, quindi vorrei tornare alla struttura dell'app.

A livello di query, è possibile rendere tutte le tabelle completamente separate per titolare senza dati di tabelle condivise e includere una colonna di identificatore multitenant in modo che nessuno possa iniettare sql se si fosse sicuri di includere l'identificatore di multitenant come variabile esplicita.

Quindi, in un modello di entità, è possibile ereditare un'interfaccia multitenant per tutti che fanno riferimento agli identificativi del titolare (come parte di EF).

In questo modo l'onere è isolato su OAuth o su altre librerie che si occupano dell'autenticazione di terze parti.