Come eseguire l'autorizzazione basata sui ruoli con OAuth2 / OpenID Connect?

14

Sto cercando di usare OAuth2 per l'autenticazione / l'autorizzazione, ma dopo aver letto molto, sono confuso ... Sto cercando di capire come OAuth e OpenIDConnect si relazionano tra loro e come posso usarli esattamente per AUTORIZZO.

Da quanto ho capito finora :

  • OpenID Connect è la soluzione migliore per l'autenticazione, OAuth è la soluzione migliore per l'autorizzazione
  • OAuth2 l'autorizzazione viene eseguita tramite gli ambiti
  • Un ambito è l'autorizzazione fornita dall'utente a un client, convalidato sul server delle risorse

  • un OpenID Connect id_token è inteso principalmente per l'applicazione client, per fornire informazioni utente e NON come un modo per il server di risorse per validare l'utente

Ecco il mio caso d'uso :

  • Ho bisogno di fornire SSO a un set di servizi web completamente stateless creati da noi
  • OAuth è limitato alla concessione di resource_owner
  • Il server di identità viene fornito al nostro fianco e connesso a un server LDAP
  • Solo le app di fiducia possono essere registrate come fornitori di servizi

E quello che sto cercando di fare, cosa che mi fa impazzire :

  • Solo gli utenti autorizzati possono accedere a una determinata API del servizio web

Quindi, ho bisogno di un modo per verificare il permesso dato da un'entità esterna a un utente, al server delle risorse. Quale, a mio avviso, esclude l'utilizzo di OAuth per l'autorizzazione?

Non sono sicuro di come ottenerlo con OAuth / OpenID connect, o anche se si adatta al mio caso d'uso.

  1. L'accesso basato sui ruoli può essere fatto per funzionare con gli ambiti OAuth2?
  2. Sarebbe ok passare il id_token al server delle risorse, con un reclamo contenente i ruoli dell'utente (e scartare completamente il token di accesso)? Quindi id_token verrebbe usato sia per l'autenticazione che per l'amp; autorizzazione. Dato che id_token è firmato e contiene hash, andrebbe bene, giusto?
  3. Dovrei semplicemente autenticarmi con OpenIDConnect, controllando la presenza di id_token, eliminare del tutto access_token e sviluppare il mio sistema di autorizzazione basato sui ruoli?

Chiedo scusa per il muro di testo, non sono sicuro di aver frainteso lo scopo di OAuth / OpenID Connect qui. Sto facendo ipotesi sbagliate?

Grazie.

    
posta lv. 09.05.2016 - 15:32
fonte

1 risposta

4

Il concetto di ruolo può essere utilizzato con token di accesso in OpenID Connect (Oauth2).

Considera che un ambito è una richiesta di attestazioni sull'utente che dovrebbe essere inclusa nel token di accesso. L'API che richiede l'accesso sa che ha bisogno del (diciamo) ruolo "dipendente", include il parametro di query " scope=openid roles " nella richiesta.

Il server di autenticazione (AS) ha accesso alle informazioni sul ruolo dell'utente (ad esempio in una directory LDAP). Può quindi cercare i ruoli dell'utente e includerli nella rivendicazione "ruoli" nel token di accesso.

Potresti anche restringere l'ambito richiedendo il ruolo stesso ( scope=openid employee ), nel qual caso l'AS potrebbe includerlo se l'utente è un membro di quel gruppo. Questo è un po 'meno scalabile in quanto richiede una conoscenza dettagliata dei ruoli richiesti, ma riduce la quantità di PII nel token e ne riduce le dimensioni. Inoltre, se l'utente non è un membro del gruppo specificato (ovvero, l'ambito non può essere incluso nel token), l'AS deve informare l'API in merito a OAuth2.

L'uso del ruolo è abbastanza comune, e alcuni esempi possono essere trovati su:

Così come per le domande 2) e 3): non farlo:)

    
risposta data 15.08.2018 - 09:09
fonte

Leggi altre domande sui tag