2015-04-21 5 views
10

Sfondo

Sviluppiamo un prodotto SaaS multi-tenant in Azure che ha un AngularJS front-end e API Web back-end. Utilizziamo Azure AD per l'autenticazione e l'abbiamo collegato con ADAL JS (utilizzando la concessione implicita OAuth2). Trattandosi di un'applicazione multi-tenant, consentiamo ai clienti di autenticarsi con il proprio Azure AD (che può essere connesso o meno a un annuncio interno).Gruppo sostiene con Azure AD e OAuth2 concessione implicita ADAL JS

Finora tutto funziona bene. ADAL JS porta l'utente alla pagina di accesso di Azure e, una volta che l'utente si è autenticato, viene rilasciato un token OAuth2. Questo token JWT viene quindi inviato con tutte le chiamate API come token al portatore in cui abbiamo il nostro processo di trasformazione delle attestazioni per il mapping delle attestazioni in arrivo da Azure alle richieste delle nostre applicazioni.

Piuttosto che specificare singoli utenti nel processo di trasformazione delle attestazioni, proviamo a farlo per gruppi di annunci. Ciò consente ai nostri clienti di avere gruppi di sicurezza nel loro annuncio e quindi la nostra applicazione lo userà per mappare le richieste di applicazione corrette.

Il problema

Il token JWT che riceviamo non contiene una proprietà groups, pur avendo impostato groupMembershipClaims-SecurityGroup nel manifesto dell'applicazione AAD. Da allora ho letto in this tweet from Vittorio che

La concessione implicita non invierà tali affermazioni, in quanto restituisce il token nel querystring - è facile a soffiare passato lunghezza massima

Con ulteriori indagini, ho anche trovato this StackOverflow answer from Vittorio che dice

Ho verificato e nel caso di concessione implicita riceverai gruppi sempre tramite la richiesta di overage. Si prega di fare riferimento a https://github.com/AzureADSamples/WebApp-GroupClaims-DotNet/tree/master/WebApp-GroupClaims-DotNet - vi mostrerà come elaborare la richiesta di overage per recuperare i gruppi.

ho dato un'occhiata al il token JWT e non include alcuna pretesa eccedenza (identificato da _claim_names e _claim_sources). Sono sicuramente un membro di due gruppi nel mio Azure AD.

Ora ho anche due affermazioni in conflitto riguardo al fatto se sia possibile ottenere informazioni di gruppo (direttamente o indirettamente) nel token di concessione implicita.

Domanda 1: Devo ottenere una richiesta di sovrautilizzo che posso utilizzare per ottenere informazioni sul gruppo? In tal caso, devo fare qualcosa per assicurarmi che il reclamo venga inviato a me?

Graph API

Se posso ottenere un credito di eccedenza con un link per l'utente nel API grafico o se devo mestiere manualmente il link per ottenere gruppi dell'utente, io sono ancora un po 'incerto come autenticarsi con l'API grafico.

Ho bisogno di contattare l'API grafico dal back-end dopo aver ricevuto una richiesta con un token al portatore (da ADAL JS).

Domanda 2: Posso inviare lo stesso token portatore all'API del grafico per leggere le informazioni sulla directory dell'utente?O devo autenticare direttamente dalla mia applicazione al tenant API grafico nel contesto dell'applicazione piuttosto che dall'utente?

+0

Non sono mai riuscito a ottenere questo lato client funzionante. Invece faccio un lato server call Graph Graph usando il token dell'utente e la concessione On Behalf Of. Posso quindi ottenere le appartenenze ai gruppi dall'API Graph. –

risposta

4

scuse per la confusione qui. Verificherò nuovamente la dichiarazione relativa al superamento, ma in ogni caso, per motivi di sblocco rapido, supponiamo che sia necessario ottenere manualmente i gruppi senza l'aiuto della richiesta di overage. Non è possibile riutilizzare il token che si invia alla propria API Web. Quel token ha come ambito la tua app, e ogni altro destinatario lo rifiuterà (o dovrebbe). La buona notizia è che il flusso attraverso il quale il tuo back-end può richiedere un nuovo token con scope per il grafico è facile da implementare. Vedi https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet - i dettagli nel tuo caso sono un po 'diversi (la tua web API ha il pubblico == clientid della tua app) ma la topologia e il codice/le chiamate coinvolte sono esattamente gli stessi. HTH! V.

+0

Grazie per quello. Ho implementato la ricerca dell'API del grafico manuale utilizzando il comando token. Funziona bene quando il mio utente e la mia applicazione si trovano nello stesso AAD/tenant. Tuttavia, quando ho l'utente e l'applicazione in tenant separati, ottengo _AADSTS50034: per accedere a questa applicazione, è necessario aggiungere l'account alla directory xxxxx.onmicrosoft.com._ quando si tenta di acquisire il token. –

+0

L'utente è un ospite nel titolare di destinazione? In caso contrario, è in base alla progettazione ... E l'app richiede l'autorizzazione a livello di app sul grafico anziché delegata – vibronet

+0

Non sei proprio sicuro di cosa intendi. L'utente (appartenente al tenant del cliente) accede alla nostra applicazione (nel nostro inquilino). Stai dicendo che devo aggiungere gli utenti del cliente anche al nostro inquilino? Pensavo che il punto delle app multi-tenant fosse che non dovevamo avere a che fare con utenti come questo? Tutto ciò che stiamo cercando di fare è consentire ai reparti IT dei nostri clienti di aggiungere i loro utenti ai gruppi nel loro annuncio come di consueto e quindi ottenere queste appartenenze ai gruppi nella nostra applicazione in modo da poter basare le autorizzazioni dei gruppi piuttosto che gestire direttamente gli utenti. Il mio pensiero è corretto o esiste un modo migliore per raggiungere questo obiettivo? –

Problemi correlati