español alternatives keycloak

alternatives - ¿Cuáles son los puntos finales OAuth2/OpenID Connect de Keycloak?



keycloak js (8)

Con la versión 1.9.3.Final, Keycloak tiene varios puntos finales OpenID disponibles. Estos se pueden encontrar en /auth/realms/{realm}/.well-known/openid-configuration . Suponiendo que su reino se llame demo , ese punto final producirá una respuesta JSON similar a esta.

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

Por lo que he encontrado, estos puntos finales implementan la especificación Oauth 2.0 .

Estamos tratando de evaluar Keycloak como una solución de SSO, y se ve bien en muchos aspectos, pero la documentación es penosamente escasa en lo básico.

Para una instalación de Keycloak dada en http://localhost:8080/ for realm test , ¿cuáles son el punto final de autorización OAuth2 , el punto final del token OAuth2 y el punto final OpenIn Connect UserInfo ?

No estamos interesados ​​en usar la propia biblioteca de cliente de Keycloak, queremos usar las bibliotecas de cliente estándar de OAuth2 / OpenID Connect, ya que las aplicaciones de cliente que usan el servidor de keycloak se escribirán en una amplia gama de lenguajes (PHP, Ruby, Node, Java, C # , Angular). Por lo tanto, los ejemplos que usan el cliente Keycloak no nos sirven.


Después de mucho investigar, pudimos raspar la información más o menos (principalmente de la propia biblioteca JS de Keycloak):

  • Punto final de autorización: /auth/realms/{realm}/tokens/login
  • Punto final del token: /auth/realms/{realm}/tokens/access/codes

En cuanto a OpenID Connect UserInfo , en este momento (1.1.0.Final) Keycloak no implementa este punto final, por lo que no es totalmente compatible con OpenID Connect. Sin embargo, ya hay un patch que agrega que a partir de este escrito debería incluirse en 1.2.x.

Pero , irónicamente, Keycloak envía un id_token junto con el token de acceso. Tanto id_token como access_token son access_token firmados , y las claves del token son las claves de OpenID Connect, es decir:

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

Entonces, aunque Keycloak 1.1.x no es totalmente compatible con OpenID Connect, "habla" en el lenguaje OpenID Connect.


En la versión 1.9.0, json con todos los puntos finales está en address / auth / realms / {realm}

  • Punto final de autorización: / auth / realms / {realm} / account
  • Punto final del token: / auth / realms / {realm} / protocol / openid-connect

En realidad, el enlace a .well-know está en la primera pestaña de la configuración de su reino, pero el enlace no se ve como un enlace, sino como el valor del cuadro de texto ... mal diseño de interfaz de usuario. Captura de pantalla de la pestaña General del reino


Enlace siguiente Proporciona un documento JSON que describe metadatos sobre Keycloak

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

Información siguiente informada con Keycloak 6.0.1 para el dominio 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" }


FQDN / auth / realms / {realm_name} /. Bien conocido / openid-configuration

verá todo aquí, además, si el proveedor de identidad también es Keycloak, al alimentar esta URL se configurará todo también con otros proveedores de identidad si lo admiten y ya lo manejaron


Para Keycloak 1.2, la información anterior se puede recuperar a través de la URL

http://keycloakhost:keycloakport/auth/realms/ {realm} /. configuración conocida / openid

Por ejemplo, si el nombre del reino es demo :

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

Un ejemplo de salida de la URL anterior:

{ "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", "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", "refresh_token", "password" ], "response_types_supported": [ "code" ], "subject_types_supported": [ "public" ], "id_token_signing_alg_values_supported": [ "RS256" ], "response_modes_supported": [ "query" ] }

Información encontrada en https://issues.jboss.org/browse/KEYCLOAK-571

Nota: es posible que deba agregar su cliente a la lista de URI de redireccionamiento válido


versión de keycloak: 4.6.0

  • TokenUrl: [dominio] / auth / realms / {REALM_NAME} / protocol / openid-connect / token
  • AuthUrl: [dominio] / auth / realms / {REALM_NAME} / protocol / openid-connect / auth