2015-02-22 17 views
29

Stiamo provando a valutare Keycloak come soluzione SSO, e sembra buono sotto molti aspetti, ma la documentazione è dolorosamente priva delle basi.Quali sono gli endpoint OAuth2/OpenID Connect di Keycloak?

Per un determinato impianto Keycloak su http://localhost:8080/ per il dominio test, quali sono le OAuth2 Authorization Endpoint, OAuth2 Token Endpoint e OpenID Connect UserInfo Endpoint?

Non siamo interessati all'utilizzo della libreria client di Keycloak, vogliamo utilizzare le librerie client OAuth2/OpenID Connect standard, poiché le applicazioni client che utilizzano il server keycloak verranno scritte in una vasta gamma di lingue (PHP, Ruby, Node , Java, C#, Angolare). Pertanto gli esempi che utilizzano il client Keycloak non sono utili per noi.

+0

Cosa hai usato invece? – Ced

+1

Siamo finalmente riusciti a convincere di sopra che OAuth non ha nulla a che fare con il login e la sicurezza come tecnologia da utilizzare nell'applicazione stessa, ed è rilevante solo per l'integrazione con terze parti. È stato difficile spiegare il fatto che Google e FB che lo utilizzano ovunque non abbiano alcuna rilevanza per noi. –

+0

@AmirAbiri non direbbe che è usato solo per l'integrazione con terze parti. Questo è il suo uso principale al giorno d'oggi, ma, essendo un protocollo che sempre più aziende di Internet supportano, potrebbe avere senso anche se hai a che fare con più applicazioni (o microservizi) nel tuo ambiente aziendale e vuoi una soluzione SSO. In realtà nel mio caso, dopo aver usato il keycloak per più di 10 mesi, penso che potrebbe anche meritare per le applicazioni semplici, dato che si occupa di tutte le cose della gestione degli utenti. –

risposta

43

Per Keycloak 1.2 le suddette informazioni possono essere recuperate tramite l'url

http://keycloakhost:keycloakport/auth/realms/ {regno} /.noto/openid configurazione

Ad esempio, se la sfera è demo,

http://keycloakhost:keycloakport/auth/realms/demo/.well-known/openid-configuration

Un'uscita esempio dall'alto URL,

{" emittente ":" http://localhost:8080/auth/realms/demo "," authorization_endpoint ":" http://localhost:8080/auth/realms/demo/protocol/openid-connect/auth "," token_endpoint ":" http://localhost:8080/auth/realms/demo/protocol/openid-connect/token "," userinfo_endpoint ":" http://localhost:8080/auth/realms/demo/protocol/openid-connect/userinfo "," end_session_endpoint ":" http://localhost:8080/auth/realms/demo/protocol/openid-connect/logout "," jwks_uri ":" http://localhost:8080/auth/realms/demo/protocol/openid-connect/certs "," grant_types_supported ": [" codice_autorizzazione "," refresh_token "," password "]," response_types_supported ": [ "codice"], "subject_types_supported": [ "pubblico"], "id_token_signing_alg_values_supported": [ "RS256"], "response_modes_supported": [ "query"]}

informazioni che si trovano in https://issues.jboss.org/browse/KEYCLOAK-571

Nota : Potrebbe essere necessario aggiungere il client all'elenco URI di reindirizzamento valido

+1

Da allora abbiamo scartato usando Keycloak, quindi non posso verificarlo. –

+0

Quale URL si dovrebbe utilizzare per avere un collegamento di accesso su un'app Web? U provato tutti questi, ma non lo fanno – Ced

+0

@AmirAbiri qual è la tua alternativa a KeyCloak? Attualmente sto valutando. Mi piace l'interfaccia utente e vorrei avere tutti i miei utenti gestiti da esso, ma ho difficoltà ad attaccare la mia applicazione GoLang ad esso. – Tarion

9

Dopo tanto scavare intorno siamo stati in grado di raschiare l'informazioni più o meno (soprattutto dal proprio JS cliente lib del Keycloak):

  • Autorizzazione Endpoint:/auth/realms/{realm}/tokens/login
  • Token Endpoint:/auth/realms/{realm}/tokens/access/codes

Come per OpenID Connect UserInfo, proprio ora (1.1.0.Final) Keycloak non implementa questo endpoint, quindi non è completamente compatibile con OpenID Connect. Tuttavia, c'è già un patch che aggiunge che al momento della stesura di questo articolo dovrebbe essere incluso in 1.2.x.

Ma - Ironicamente, Keycloak invia un id_token insieme al token di accesso. Sia il id_token e la access_token sono signed JWTs, e le chiavi del token sono le chiavi di OpenID Connect, vale a dire:

"iss": "{realm}" 
"sub": "5bf30443-0cf7-4d31-b204-efd11a432659" 
"name": "Amir Abiri" 
"email: "..." 

Così, mentre Keycloak 1.1.x non è pienamente compatibile OpenID Connect, lo fa "parlare" a OpenID Connect linguaggio.

3

Nella versione 1.9.0 json con tutti gli endpoint è all'indirizzo/auth/real ms/{regno}

  • Autorizzazione Endpoint:/auth/regni/{regno}/conto
  • Token Endpoint:/auth/regni/{regno}// protocollo OpenID-connect
10

Con la versione 1.9.3. Finale, Keycloak ha un numero di endpoint OpenID disponibili. Questi possono essere trovati a /auth/realms/{realm}/.well-known/openid-configuration. Supponendo che il tuo dominio sia chiamato demo, quell'endpoint produrrà una risposta JSON simile a questa.

{ 
    "issuer": "http://localhost:8080/auth/realms/demo", 
    "authorization_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/auth", 
    "token_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/token", 
    "token_introspection_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/token/introspect", 
    "userinfo_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/userinfo", 
    "end_session_endpoint": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/logout", 
    "jwks_uri": "http://localhost:8080/auth/realms/demo/protocol/openid-connect/certs", 
    "grant_types_supported": [ 
    "authorization_code", 
    "implicit", 
    "refresh_token", 
    "password", 
    "client_credentials" 
    ], 
    "response_types_supported": [ 
    "code", 
    "none", 
    "id_token", 
    "token", 
    "id_token token", 
    "code id_token", 
    "code token", 
    "code id_token token" 
    ], 
    "subject_types_supported": [ 
    "public" 
    ], 
    "id_token_signing_alg_values_supported": [ 
    "RS256" 
    ], 
    "response_modes_supported": [ 
    "query", 
    "fragment", 
    "form_post" 
    ], 
    "registration_endpoint": "http://localhost:8080/auth/realms/demo/clients-registrations/openid-connect" 
} 

Per quanto ho trovato, questi endpoint attuare il Oauth 2.0 spec.

+0

Nota che OpenID Connect è fondamentalmente un insieme di standard, di cui OAuth 2 è uno (JWT è un altro) –

Problemi correlati