2016-03-13 20 views
6

Nel mio progetto attuale utilizzo in modo completo il progetto Spring Security OAuth (http://projects.spring.io/spring-security-oauth/) per proteggere le nostre risorse (Web API). Tutto funziona bene fino ad ora.Spring Security e OpenID Connect (OIDC)

Attualmente sto lavorando allo sviluppo dei client e sto cercando un buon supporto per gli scenari di autenticazione (come OAuth è un protocollo di autorizzazione). Dopo una lunga e lunga ricerca su internet sono abbastanza sicuro che dovrei prendere OpenID Connect (http://openid.net/connect/) per soddisfare questo requisito, in quanto è "un semplice livello di identità su OAuth 2.0" (so che non esiste un "semplice" in caso di argomenti di sicurezza).

Triste ma vero, non sono in grado di trovare alcuna buona risorsa sul supporto per OpenID Connect (da non confondere con "puro" OpenID) in Spring Security. Esiste un'implementazione di riferimento OpenID Connect al https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server ma mi aspettavo qualcosa di simile direttamente in/da Spring Security con una documentazione completa e così via. Ho trovato circa 2 anni di discussione su di esso qui https://github.com/spring-projects/spring-security-oauth/issues/220 ma qual è lo stato attuale? La ricerca di "Supporto Spring Security per OpenID Connect" non fornisce risultati "tangibili".

Avete informazioni, documentazione e/o esperienza sull'implementazione di OpenID Connect con l'aiuto di Spring Security?

risposta

3

Prima OpenID Connect emerse, era praticamente giusto supporre che il valore del parametro di richiesta response_type essere sia code (per authorization code flow) o token (per implicit flow). Tuttavia, ora un'implementazione del server di autorizzazione deve essere in grado di gestire qualsiasi combinazione di (code, token, id_token) e none. I dettagli sono descritti in "OpenID Connect Core 1.0, 3. Authentication" e "OAuth 2.0 Multiple Response Type Encoding Practices".

Come primo passo per supportare OpenID Connect, Spring Security OAuth deve diventare flessibile per response_type. È possibile trovare una richiesta per esso a "Issue 619: Handling additional response_types". Tuttavia, è difficile modificare un codice esistente che si aspetta solo code o token in uno nuovo che può accettare più valori alla volta. Al momento della stesura di questo documento, il commento più recente di Issue 619 rilasciato il 12 dicembre 2015 termina con una frase di seguito riportata.

Eventuali commenti sono più che benvenuti in quanto questo si è rivelata (come avevo previsto) una grande refactoring esercizio.

Se Spring Security OAuth è un progetto puramente volontario senza alcun supporto da parte di enti commerciali, è improbabile che si verifichi un cambiamento così grande.

La mia esperienza: Circa due anni fa, ho scritto un server OAuth 2.0 da zero. È stato dopo che sapevo dell'esistenza di OpenID Connect. Dopo aver letto le specifiche relative a OpenID Connect, ho finalmente raggiunto una conclusione per scaricare l'implementazione esistente e riscrivere nuovamente il server da zero.

Come hai intuito, OpenID Connect non è affatto semplice.

Vedere anche "5. Tipo di risposta" in "Full-Scratch Implementor of OAuth and OpenID Connect Talks About Findings".


Aggiornamento (2017-Nov-23)

Autorizzazione Server e OpenID Provider su Spring Framework
https://github.com/authlete/spring-oauth-server

Server Resource su Spring Framework
https://github.com/authlete/spring-resource-server

spring-oauth-server supporta OAuth 2.0 e OpenID Connect. spring-resource-server ha un'implementazione di UserInfo Endpoint definito in "OpenID Connect 1.0, 5.3. UserInfo Endpoint". Entrambe le implementazioni non utilizzano Spring Security OAuth ma usano Spring Boot e Authlete.

Blog: Spring + OAuth 2.0 + OpenID Connect