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?
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. –