it-swarm.dev

Perché usare OpenID Connect invece di OAuth2 normale?

Ho appena iniziato a utilizzare OAuth 2. come modo per autenticare i miei utenti. Funziona benissimo: utilizzo l'API di identità/profilo di ciascun provider per ottenere un indirizzo e-mail convalidato dell'utente.

Ora ho letto OpenID Connect e sono un po 'confuso.

Qual è la differenza tra OpenID Connect e l'utilizzo dell'API di identità su OAuth2? È solo che ho un'API di profilo standard, così non devo preoccuparmi se ottengo un "email" o un "emails" JSON è tornato?

O c'è di più, il che rende l'approccio OpenID Connect più sicuro del mio primo approccio?

117
rdmueller

OpenID connect ti darà un token di accesso più un id token . Il token ID è un JWT e contiene informazioni sull'utente autenticato. È firmato dal provider di identità e può essere letto e verificato senza accedere al provider di identità.

Inoltre, OpenID connect standardizza un paio di cose che oauth2 lascia alla scelta. ad esempio ambiti, rilevamento degli endpoint e registrazione dinamica dei client.

Ciò semplifica la scrittura di codice che consente all'utente di scegliere tra più provider di identità.

81
flup

OAuth fornisce solo e dovrebbe fornire solo l'autorizzazione utilizzando un token di accesso. OpenID connect è basato su OAuth 2 per fornire informazioni di autenticazione dell'utente. Tuttavia, non fornirà un'implementazione più solida di OAuth (poiché utilizza OAuth e aggiungi alcune interazioni extra con un provider OpenID).

OpenID Connect 1.0 è un semplice livello di identità in cima al protocollo OAuth 2.0 [RFC6749]. Consente ai clienti di verificare l'identità dell'utente finale in base all'autenticazione eseguita da un server di autorizzazione, nonché per ottenere informazioni di base sul profilo dell'utente finale in modo interoperabile e simile a REST. OpenID Connect Core 1.0 - draft 17

OpenID connect offre un modo "standard" per ottenere l'identità dell'utente. Se usi OAuth e l'API, dovresti adattare la tua richiesta per ogni risorsa, che potrebbe non fornire sempre le stesse informazioni o cambiare nel tempo. E concettualmente usi OAuth per poter utilizzare un'API, non per autenticare un utente.

Come sfondo, le specifiche OAuth 2.0 Authorization Framework [RFC6749] e OAuth 2.0 Bearer Token Usage [RFC6750] forniscono un quadro generale per le applicazioni di terze parti da ottenere e utilizzano un accesso limitato alle risorse HTTP. Definiscono i meccanismi per ottenere e utilizzare i token di accesso per accedere alle risorse, ma non definiscono metodi standard per fornire informazioni sull'identità. In particolare, senza profilazione OAuth 2.0, è incapace di fornire informazioni sull'autenticazione di un utente finale OpenID Connect Core 1.0 - draft 17

Nota che OpenID connect fornisce un id_token con alcune informazioni sull'utente. Tuttavia, se si desidera l'intero set di informazioni, è comunque necessario il access_token per richiedere al provider OpenID di ottenere userinfo (che mi ha confuso la prima volta che l'ho visto). Ciò dimostra che la richiesta di informazioni utente da un'API o dal provider OpenID utilizza quasi lo stesso metodo. Vedi 5.3.1. userinfo request nel progetto.

30
Nereis

OAuth è un protocollo di autorizzazione che fornisce un modo per autorizzare l'accesso a una risorsa protetta. Un sottoprodotto del processo di autorizzazione è che l'utente è autenticato.

Tecnicamente, OAuth non deve fornire alcuna informazione sull'utente. Ciò che fornisce è una convalida che l'utente ha dato l'autorizzazione all'applicazione per accedere ad alcuni dati. Questo è regolato dall'ambito della concessione di autorizzazione.

OpenID Connect consente all'applicazione di recuperare informazioni sull'utente autenticato. Soprattutto, fornisce un livello di garanzia che le informazioni siano valide (per quanto riguarda comunque il server di autorizzazione). Questo può quindi essere utilizzato per facilitare la federazione delle identità.

In passato, la federazione veniva raggiunta con OAuth concedendo un ambito che consentiva l'accesso alle informazioni sull'identità dell'utente. OpenID Connect standardizza tale ambito.

16
Tim

OpenID Connect è un profilo di OAuth2 ... che definisce un'architettura che consente a una persona di autorizzare un provider di identità a rilasciare determinate richieste dell'utente a un client (sito Web/applicazione mobile).

OAuth2 offre la concessione di credenziali per la password del proprietario della risorsa, che è giustamente denunciata dagli esperti IAM come "Il diavolo".

Un modello comune per l'API OpenID Connect è di tre passaggi:
1) Ottieni un codice
2) Ottieni token come il access_token, refresh_token, e id_token
3) Ottieni informazioni sull'utente che contengono attestazioni come nome utente, email, ecc.
Lo schema per id_token, che è un JWT, è definito nell'ambito di OpenID Connect, così come molti altri dettagli.

Un altro motivo per utilizzare OpenID Connect è che esiste una soluzione sicura per l'autenticazione centralizzata per il software mobile (almeno IOS e Android). L'attuale best practice definita da Google è utilizzare nuove funzionalità di sicurezza che impedire a un'applicazione mobile di vedere i cookie o le credenziali in una vista Web. Google ha pubblicato AppAuth IOS e Android perché in realtà non vogliono che tu perda Credenziali di Google! Al momento della stesura di questo documento, ci sono diversi provider OpenID (noti anche come IDP ...) che supportano il software AppAuth di Google OpenID Connect, tra cui: Google, OKTA, Ping e il mio prodotto Gluu.

Guarda anche:

  • OAuth 2.0 per Native Apps draft-wdenniss-oauth-native-apps-02
  • AppAuth per IOS
  • AppAuth per Android
8
Mike Schwartz

L'uso di OAuth come metodo di autenticazione non è raccomandato, è esplicitamente progettato come metodo di autorizzazione delegato.

Facebook stava usando OAuth come metodo di autenticazione, ma una persona intraprendente ha scoperto come rubare il access_token da Facebook - voce di blog completa

OpenID Connect rende molto più difficile rubare i token di accesso attraverso un tale meccanismo.

5
Alex White

Open id connect è costruito nella parte superiore di OAuth e quindi è più robusto. OAuth è il protocollo utilizzato solo per l'autorizzazione e open id connect è molto simile a OAuth ma combina la funzione di OAuth anche. Puoi iniziare la comunicazione tra i tuoi RP e IP usando questo protocollo e i loro sono diversi buchi nel OAuth ecco perché è meglio usare Open Id Connect.

1
Utsav