Domanda:
Perché utilizzare OpenID Connect invece del semplice OAuth2?
rdmueller
2013-06-21 11:18:15 UTC
view on stackexchange narkive permalink

Ho appena iniziato a utilizzare OAuth 2.0 come metodo per autenticare i miei utenti. Funziona alla grande: utilizzo l'identità / l'API del profilo di ciascun provider per ottenere un indirizzo email convalidato dell'utente.

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

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

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

Bene, non sapevo di "OpenID Connect", l'ho capito come "OpenID" + "Connect". Sono sicuro che hai già controllato questo: http://softwareforallseasons.blogspot.fr/2011/10/oauth-vs-openid-connect.html + Ti suggerisco di modificare la tua domanda in modo che legga OAuth 2.0 invece di solo OAuth.
@Aki: sì, ho visto il post sul blog, ma non sono riuscito a ricavarne nulla.
@Ralf: Per come la vedo io, puoi costruire app con oauth e autorizzare la condivisione o meno di risorse specifiche legate all'account utente. Utilizzando openid connect, è reso più semplice, il provider non deve implementare il proprio livello sopra oauth per gestirlo ei client hanno un modo standard per accedere ai dati.
"Uso semplicemente l'identità / l'API del profilo di ciascun provider ** per ottenere un indirizzo email convalidato ** dell'utente." Ciò significa che è necessario limitare il set di provider consentiti. Un provider arbitrario non garantisce la convalida. In alternativa puoi rifiutare indirizzi email che non corrispondono al dominio del provider.
Come un articolo su [oauth.net afferma: OAuth 2.0 non è un protocollo di autenticazione] (http://oauth.net/articles/authentication/).In realtà è un framework di autorizzazione.Consigliano di utilizzare OpenID Connect (basato su OAuth 2.0) se si desidera l'autenticazione.
Ho trovato questa presentazione video di YouTube molto utile: [* OAuth 2.0 e OpenID Connect (in inglese semplice) *] (https://youtu.be/996OiexHze0) di Nate Barbettini.
Sei risposte:
flup
2013-12-17 09:33:57 UTC
view on stackexchange narkive permalink

OpenID Connect ti fornirà un token di accesso più un token id. 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 del codice che consente all'utente di scegliere tra più provider di identità.

Sei sicuro che la tua dichiarazione "OpenID connect ti darà un token di accesso più un token id"?è corretta?Pensavo che un'applicazione potesse avere un id_token e condividerlo con un'altra applicazione e quindi ottenere un token di accesso da tale applicazione.OIDC si basa sul protocollo OAuth2 ma non necessariamente ottieni entrambi.Tuttavia, può accadere la maggior parte delle volte.
"OpenID connect ti darà un token di accesso più un token id.">> Per la maggior parte dei casi questo è corretto e il modo in cui viene solitamente gestito.Si effettua * una * richiesta composta da "token id_token" come responseTypes e "openid" come ambito, che restituirà contemporaneamente un token di accesso e un token id.Il token ID è pensato per il client, mentre il token di accesso è pensato per essere opaco per il client ed è pensato per essere trasmesso nelle richieste al server di risorse da proteggere, come un'API o un altro backend.
"Pensavo che un'applicazione potesse avere un id_token e condividerlo con un'altra applicazione e quindi ottenere un token di accesso da tale applicazione.">> Non scambi un token ID con un token di accesso, se è questo che intendevi.Ed entrambi sono problemi del server di autorizzazione / IdP, non di un'altra applicazione o di un altro server di risorse (sebbene il server di autorizzazione e il server di risorse a volte possono essere gli stessi).
Nereis
2014-01-21 20:07:21 UTC
view on stackexchange narkive permalink

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

OpenID Connect 1.0 è un semplice livello di identità in cima il 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é di ottenere informazioni di base sul profilo dell'Utente finale in modo interoperabile e simile a REST. OpenID Connect Core 1.0 - bozza 17

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

Come sfondo, OAuth 2.0 Authorization Framework [RFC6749] e OAuth 2.0 Bearer Token Usage [RFC6750] Le specifiche forniscono una struttura generale per le applicazioni di terze parti per ottenere e utilizzare 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 la profilazione di OAuth 2.0, non è in grado di fornire informazioni sull'autenticazione di un utente finale. OpenID Connect Core 1.0 - bozza 17

Nota che OpenID connect fornisce un id_token con alcune informazioni sull'utente. Tuttavia, se vuoi l'intero set di informazioni, hai ancora bisogno di access_token per richiedere al provider OpenID di ottenere userinfo (cosa che mi ha confuso la prima volta che l'ho visto). Ciò mostra che la richiesta di informazioni utente da un'API o dal provider OpenID utilizza quasi lo stesso metodo. Vedere 5.3.1. richiesta info utente nella bozza.

Questa risposta è assolutamente corretta.Volevo solo sottolineare una cosa minore: "Tuttavia, se vuoi l'intero set di informazioni, hai ancora bisogno di access_token per richiedere al provider OpenID di ottenere userinfo" >> questo non è necessariamente il caso a seconda del server di autorizzazione/ usato non funzionante: è anche possibile includere già il profilo completo all'interno del token ID = token JWT, o anche qualsiasi altra informazione utilizzando attestazioni personalizzate;un esempio è https://auth0.com/docs/tokens/id-token#add-custom-claims.Quindi non è più necessario eseguire la richiesta / userinfo.
Tim
2015-02-26 10:12:29 UTC
view on stackexchange narkive permalink

OAuth è un protocollo di autorizzazione che fornisce un modo per fornire l'autorizzazione ad accedere a una risorsa protetta. Un sottoprodotto del processo di autorizzazione è l'autenticazione dell'utente.

Tecnicamente, OAuth non è tenuta a 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 dell'autorizzazione.

OpenID Connect fornisce un modo per l'applicazione per recuperare le informazioni sull'utente autenticato. Ancora più importante, fornisce un livello di garanzia che le informazioni sono valide (per quanto riguarda il server di autorizzazione comunque). Questo può quindi essere utilizzato per facilitare la federazione delle identità.

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

Il provider esterno deve ancora supportare l'ID aperto, giusto?Non puoi semplicemente implementare open id sopra i provider oauth 2 esistenti come client di quei servizi esterni.
Mike Schwartz
2016-06-24 00:02:41 UTC
view on stackexchange narkive permalink

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

OAuth2 offre il Concessione delle credenziali della password del proprietario della risorsa, che è giustamente calunniata dagli esperti IAM come "Il diavolo".

Un modello comune per OpenID Connect API è costituito da tre passaggi:
1) Ottieni un codice
2) Ottieni token come access_token , refresh_token e id_token
3) Ottieni informazioni 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 consiste nell'utilizzare nuove funzionalità di sicurezza che impediscono a un'applicazione mobile di vedere cookie o credenziali in una visualizzazione web. Google ha pubblicato le librerie AppAuth IOS e Android perché davvero non vogliono che tu trapeli le credenziali di Google! Al momento della stesura di questo articolo, esistono diversi provider OpenID (noti anche come IDP ...) che supportano il software Google OpenID Connect AppAuth, tra cui: Google, OKTA, Ping e il mio prodotto Gluu.

Vedi Inoltre:

  • OAuth 2.0 per app native draft-wdenniss-oauth-native-apps-02
  • AppAuth per IOS
  • AppAuth per Android
Alex White
2015-12-24 17:32:39 UTC
view on stackexchange narkive permalink

L'utilizzo di OAuth come metodo di autenticazione non è consigliato, è esplicitamente progettato come metodo di autorizzazione delegato.

Facebook utilizzava OAuth come metodo di autenticazione, ma una persona intraprendente ha scoperto come rubare il access_token da Facebook - post di blog completo

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

grazie per il link - devo controllare cosa fa la differenza ...
OK. Leggi il post del blog. Per me, questo legge come Facebook ha implementato alcuni buchi di sicurezza, ma non che OAuth sia rotto ... Quindi, quando uso lo schema OAuth in cui devo verificare il token di accesso da server a server, il problema descritto nel blog non poteva non si sono presentati ... sono ancora convinto che OAuth - implementato nel modo giusto - sia abbastanza buono ...
Questo è meglio spiegare perché l'utilizzo di OAuth come meccanismo di autenticazione crea un buco di sicurezza: http://www.thread-safe.com/2012/01/problem-with-oauth-for-authentication.html
Utsav
2013-10-11 18:52:08 UTC
view on stackexchange narkive permalink

Open id connect si basa su OAuth e quindi è più robusto. OAuth è il protocollo che viene utilizzato solo per l'autorizzazione e open id connect è molto simile a OAuth ma combina anche la funzionalità di OAuth. Puoi avviare la comunicazione tra i tuoi RP e IP utilizzando questo protocollo e ci sono vari loop hole nel protocollo OAuth, ecco perché è meglio usare Open Id Connect.

Sarebbe interessante sapere perché questa risposta ha ottenuto un voto negativo ...
a quali scappatoie ti riferisci (onesta curiosità) .. sto lottando con la stessa domanda dell'OP. Sembra che oAuth2 (su cui si basa Openid Connect) esegua già l'autenticazione, anche se ho familiarità con il dirottamento della sessione e gli attacchi di replay MiM possibili con semplici token Bearer. Sono queste le scappatoie a cui ti riferisci?
7 anni dopo ... quelle scappatoie sicuramente non sono state risolte dall'OIDC?Dopo tutto hai ancora i token di accesso e continuano a fare la stessa cosa che avrebbero dovuto fare in OAuth2 in OIDC?Mi sembra che se hai dei difetti nella tua implementazione di OAuth2, sovrapporre OIDC sopra non risolverà questi problemi.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...