Каковы конечные точки Keycloak OAuth2/OpenID Connect?
Мы пытаемся оценить Keycloak как решение SSO, и оно во многом выглядит хорошо, но документация испытывает больную нехватку в основах.
Для данной установки Keycloak на http://localhost:8080/
для realm test
, какова конечная точка авторизации OAuth2, OAuth2 Конечная точка токена и Конечная точка конечного пользователя OpenID Connect?
Мы не заинтересованы в использовании собственной клиентской библиотеки Keycloak, мы хотим использовать стандартные клиентские библиотеки OAuth2/OpenID Connect, поскольку клиентские приложения, использующие сервер keycloak, будут написаны на широком диапазоне языков (PHP, Ruby, Node, Java, С#, Angular). Поэтому примеры, использующие клиент Keycloak, нам не подходят.
Ответы
Ответ 1
Для Keycloak 1.2 вышеупомянутая информация может быть получена через URL
http://keycloakhost: keycloakport/auth/realms/ {realm}/. всем известный /openid-configuration
Например, если имя области - demo:
Http://keycloakhost: keycloakport/авт/царств/демо/.well известный/конфигурация OpenID
Пример вывода сверху URL:
{
"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"
]
}
Нашел информацию по адресу https://issues.jboss.org/browse/KEYCLOAK-571
Примечание. Может потребоваться добавить клиента в список действительных URI перенаправления.
Ответ 2
С версией 1.9.3.Final Keycloak имеет ряд доступных конечных точек OpenID. Их можно найти в /auth/realms/{realm}/.well-known/openid-configuration
. Предполагая, что ваше царство называется demo
, эта конечная точка будет выдавать ответ JSON, подобный этому.
{
"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"
}
Насколько я нашел, эти конечные точки реализуют спецификацию Oauth 2.0.
Ответ 3
После многократного копания мы смогли более или менее очистить информацию (в основном от собственной клиентской библиотеки Keycloak JS):
- Конечная точка авторизации:
/auth/realms/{realm}/tokens/login
- Конечная точка токена:
/auth/realms/{realm}/tokens/access/codes
Что касается OpenID Connect UserInfo, прямо сейчас (1.1.0.Final) Keycloak не реализует эту конечную точку, поэтому он не полностью совместим с OpenID Connect. Тем не менее, уже есть патч, который добавляет, что с этой записью следует включить в 1.2.x.
Но - по иронии судьбы Keycloak отправляет id_token
вместе с токеном доступа. И id_token
и access_token
являются подписанными JWT, а ключи токена - это ключи OpenID Connect, то есть:
"iss": "{realm}"
"sub": "5bf30443-0cf7-4d31-b204-efd11a432659"
"name": "Amir Abiri"
"email: "..."
Таким образом, хотя Keycloak 1.1.x не полностью совместим с OpenID Connect, он "говорит" на языке OpenID Connect.
Ответ 4
В версии 1.9.0 json со всеми конечными точками находится по адресу /auth/realms/ {realm}
- Конечная точка авторизации:/auth/realms/{realm}/account
- Конечная точка токена:/auth/realms/{realm}/protocol/openid-connect
Ответ 5
На самом деле ссылка на .well-know
находится на первой вкладке настроек вашей области, но ссылка выглядит не как ссылка, а как значение текстового поля... плохой дизайн пользовательского интерфейса. Снимок экрана: вкладка "Общая область"
Ответ 6
FQDN/авт/сферы/{realm_name}/. Известный/конфигурация OpenID
вы увидите все здесь, плюс, если поставщик удостоверений также является Keycloak, а затем этот URL-адрес будет настроен так же, как и у других поставщиков удостоверений, если они будут поддерживаться, и они уже обработали его
Ответ 7
версия keycloak: 4.6.0
- TokenUrl: [домен]/auth/realms/{REALM_NAME}/протокол /openid-connect/token
- AuthUrl: [domain]/auth/realms/{REALM_NAME}/протокол /openid-connect/auth
Ответ 8
Следующая ссылка Предоставляет документ JSON с описанием метаданных о Keycloak
/auth/realms/{realm-name}/.well-known/openid-configuration
Следующая информация сообщается с Keycloak 6.0.1 для 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"
}