web-dev-qa-db-fra.com

Que sont les points de terminaison OAuth2/OpenID Connect de Keycloak?

Nous essayons d'évaluer Keycloak en tant que solution SSO, et cela a l'air bien à bien des égards, mais la documentation manque cruellement de bases.

Pour une installation KeyCloak donnée sur http://localhost:8080/ pour le domaine test, quels sont les OAuth2 Authorization Endpoint , OAuth2 Token Endpoint et OpenID Connect UserInfo Endpoint ?

Nous ne souhaitons pas utiliser la propre bibliothèque cliente de Keycloak, nous voulons utiliser les bibliothèques clientes standard OAuth2/OpenID Connect, car les applications client utilisant le serveur keycloak seront écrites dans un large éventail de langages (PHP, Ruby, Node, Java, C # Angulaire). Par conséquent, les exemples qui utilisent le client Keycloak ne nous sont pas utiles.

47
Amir Abiri

Pour Keycloak 1.2, les informations ci-dessus peuvent être récupérées via l’URL

http: // keycloakhost: keycloakport/auth/realms/ {realm} /. bien connu/openid-configuration

Par exemple, si le royaume est demo,

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

Un exemple de sortie de l'URL ci-dessus,

{"issuer": " http: // localhost: 8080/auth/realms/demo ", "authorisation_endpoint": " http: // localhost: 8080/auth/realms/demo/protocole/openid- connect/auth "," token_endpoint ":" http: // localhost: 8080/auth/realms/demo/protocol/openid-connect/token "," userinfo_endpoint ":" http: // localhost: 8080/auth/realms/demo/protocole/openid-connect/userinfo "," end_session_endpoint ":" http: // localhost: 8080/auth/realms/demo/protocole/openid-connect/logout "," jwks_uri ":" http: // localhost: 8080/auth/realms/demo/protocole/openid-connect/certs "," grant_types_supported ": [" code_autorisation "," refresh_token "," mot de passe "]," response_types_supported ": [" code "]," subject_types_supported ": [" public "]," id_token_signing_alg_values_supported ": [" RS256 "]," response_modes_supported ": [" requête "]]

Informations trouvées sur https://issues.jboss.org/browse/KEYCLOAK-571

Remarque: Vous devrez peut-être ajouter votre client à la liste des URL de redirection valides.

66
Can't Tell

Avec la version 1.9.3.Final, Keycloak dispose d’un certain nombre de points de terminaison OpenID. Ceux-ci peuvent être trouvés à /auth/realms/{realm}/.well-known/openid-configuration. En supposant que votre domaine s'appelle demo, ce noeud final générera une réponse JSON similaire à celle-ci.

{
  "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"
}

Pour autant que j'ai trouvé, ces noeuds finaux implémentent la spécification Oauth 2.0

13
lanceball

Après de nombreuses recherches, nous avons pu extraire plus ou moins l'information (principalement à partir de la librairie cliente JS de Keycloak):

  • Noeud final d'autorisation:/auth/realms/{realm}/tokens/login
  • Token Endpoint:/auth/realms/{realm}/tokens/access/codes

En ce qui concerne OpenID Connect UserInfo, pour le moment (1.1.0.Final), Keycloak n'implémente pas ce point de terminaison. Il n'est donc pas totalement compatible OpenID Connect. Cependant, il existe déjà un correctif qui ajoute que, dès cette écriture, il devrait être inclus dans 1.2.x.

Mais - Ironiquement, Keycloak renvoie un id_token avec le jeton d'accès. id_token et access_token sont tous deux JWT signés , et les clés du jeton sont les clés d'OpenID Connect, c'est-à-dire:

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

Ainsi, bien que Keycloak 1.1.x ne soit pas entièrement conforme à OpenID Connect, il "parle" en langage OpenID Connect.

12
Amir Abiri

Dans la version 1.9.0, JSON avec tous les terminaux est à l'adresse/auth/realms/{realm}

  • Noeud final d'autorisation: / auth/realms/{realm}/account
  • Token Endpoint: / auth/realms/{realm}/protocol/openid-connect
5

version porte clé: 4.6.0

  • TokenUrl: [domaine]/auth/realms/{REALM_NAME}/protocole/openid-connect/token
  • AuthUrl: [domaine]/auth/realms/{REALM_NAME}/protocole/openid-connect/auth
2
user1653042

En fait, le lien vers .well-know se trouve sur le premier onglet des paramètres de votre royaume - mais le lien ne ressemble pas à un lien, mais à la valeur de la zone de texte ... mauvaise conception de l'interface utilisateur . Capture d'écran de l'onglet Général du royaume

2
Vitaliy Markitanov

FQDN/auth/realms/{nom_domaine} /. Bien connu/openid-configuration

vous verrez tout ici, en plus si le fournisseur d'identité est aussi Keycloak, l'alimentation de cette URL configurera tout ce qui est vrai également avec d'autres fournisseurs d'identité, s'ils le prennent en charge et qu'ils l'ont déjà géré.

2
Haseb Ansari

Lien suivant Fournit un document JSON décrivant les métadonnées relatives au porte-clés.

/auth/realms/{realm-name}/.well-known/openid-configuration

Informations suivantes signalées avec Keycloak 6.0.1 pour le domaine master

{  
   "issuer":"http://localhost:8080/auth/realms/master",
   "authorization_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/auth",
   "token_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/token",
   "token_introspection_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/token/introspect",
   "userinfo_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/userinfo",
   "end_session_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/logout",
   "jwks_uri":"http://localhost:8080/auth/realms/master/protocol/openid-connect/certs",
   "check_session_iframe":"http://localhost:8080/auth/realms/master/protocol/openid-connect/login-status-iframe.html",
   "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",
      "pairwise"
   ],
   "id_token_signing_alg_values_supported":[  
      "PS384",
      "ES384",
      "RS384",
      "HS256",
      "HS512",
      "ES256",
      "RS256",
      "HS384",
      "ES512",
      "PS256",
      "PS512",
      "RS512"
   ],
   "userinfo_signing_alg_values_supported":[  
      "PS384",
      "ES384",
      "RS384",
      "HS256",
      "HS512",
      "ES256",
      "RS256",
      "HS384",
      "ES512",
      "PS256",
      "PS512",
      "RS512",
      "none"
   ],
   "request_object_signing_alg_values_supported":[  
      "PS384",
      "ES384",
      "RS384",
      "ES256",
      "RS256",
      "ES512",
      "PS256",
      "PS512",
      "RS512",
      "none"
   ],
   "response_modes_supported":[  
      "query",
      "fragment",
      "form_post"
   ],
   "registration_endpoint":"http://localhost:8080/auth/realms/master/clients-registrations/openid-connect",
   "token_endpoint_auth_methods_supported":[  
      "private_key_jwt",
      "client_secret_basic",
      "client_secret_post",
      "client_secret_jwt"
   ],
   "token_endpoint_auth_signing_alg_values_supported":[  
      "RS256"
   ],
   "claims_supported":[  
      "aud",
      "sub",
      "iss",
      "auth_time",
      "name",
      "given_name",
      "family_name",
      "preferred_username",
      "email"
   ],
   "claim_types_supported":[  
      "normal"
   ],
   "claims_parameter_supported":false,
   "scopes_supported":[  
      "openid",
      "address",
      "email",
      "microprofile-jwt",
      "offline_access",
      "phone",
      "profile",
      "roles",
      "web-origins"
   ],
   "request_parameter_supported":true,
   "request_uri_parameter_supported":true,
   "code_challenge_methods_supported":[  
      "plain",
      "S256"
   ],
   "tls_client_certificate_bound_access_tokens":true,
   "introspection_endpoint":"http://localhost:8080/auth/realms/master/protocol/openid-connect/token/introspect"
}
0
ravthiru