Что такое конечные точки OAuth2 / OpenID Connect Keycloak?

Мы пытаемся оценить Keycloak как решение для единого входа, и оно выглядит хорошо во многих отношениях, но в документации по основам ужасно не хватает.

Для данной установки Keycloak на http://localhost:8080/ для области test, каковы конечная точка авторизации OAuth2, Конечная точка токена OAuth2 и Конечная точка OpenID Connect UserInfo?

Мы не заинтересованы в использовании собственной клиентской библиотеки Keycloak, мы хотим использовать стандартные клиентские библиотеки OAuth2 / OpenID Connect, поскольку клиентские приложения, использующие сервер keycloak, будут написаны на широком спектре языков (PHP, Ruby, Node, Java, C # , Угловой). Поэтому примеры, в которых используется клиент Keycloak, нам не нужны.


person Amir Abiri    schedule 22.02.2015    source источник
comment
Что вы в конечном итоге использовали вместо этого?   -  person Ced    schedule 30.06.2016
comment
Мы, наконец, смогли убедить наверху, что OAuth не имеет ничего общего с входом в систему и безопасностью как технология для использования в самом приложении и актуален только для интеграции с третьими сторонами. Трудно объяснить тот факт, что Google и FB используют его повсюду, не имея для нас никакого отношения.   -  person Amir Abiri    schedule 30.06.2016
comment
@AmirAbiri не сказал бы, что он используется только для сторонней интеграции. Это его основное применение в настоящее время, но, поскольку это протокол, который поддерживают все больше и больше интернет-компаний, он также может иметь смысл, если вы имеете дело с несколькими приложениями (или микросервисами) в своей собственной корпоративной среде и вам нужно решение SSO. На самом деле, в моем случае, когда я использую keycloak более 10 месяцев, я думаю, что он также заслуживает внимания для простых приложений, поскольку он заботится обо всех элементах управления пользователями.   -  person Xtreme Biker    schedule 23.12.2016


Ответы (9)


Для Keycloak 1.2 указанную выше информацию можно получить по URL-адресу

http://keycloakhost:keycloakport/auth/realms/{realm}/.well-known/openid-configuration

Например, если имя области - demo:

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

Пример вывода из вышеуказанного 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 перенаправления.

person Can't Tell    schedule 26.05.2015
comment
С тех пор мы отказались от использования Keycloak, поэтому я не могу проверить. - person Amir Abiri; 26.05.2015
comment
Какой URL-адрес можно использовать для ссылки для входа в веб-приложение? Ты пробовал все это, но они этого не делают - person Ced; 30.06.2016
comment
@AmirAbiri, какая у вас альтернатива KeyCloak? Сейчас я его оцениваю. Ему нравится пользовательский интерфейс, и я хотел бы, чтобы все мои пользователи управлялись им, но мне трудно привязать к нему свое приложение GoLang. - person Tarion; 01.09.2016
comment
@Tarion Например, есть сервер идентификации WSO2. - person Can't Tell; 02.09.2016
comment
Как мы можем обновить эту конфигурацию? - person Sidharth Chhawchharia; 18.02.2021
comment
Я боролся с Keycloak, пока не нашел этот пост с волшебным URL! - person Eric Pugh; 24.02.2021

Начиная с версии 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.

person lanceball    schedule 03.05.2016
comment
Обратите внимание, что OpenID Connect - это в основном набор стандартов, одним из которых является OAuth 2 (другим является JWT). - person Stijn de Witt; 03.04.2017
comment
Этот комментарий несколько вводит в заблуждение. OAuth2 - это стандарт для реализации протокола авторизации. OIDC - это стандарт, который работает поверх OAuth2 для идентификации. - person Thomas Lann; 14.01.2019

На самом деле ссылка на .well-know находится на первой вкладке настроек вашей области, но ссылка выглядит не как ссылка, а как значение текстового поля ... плохой дизайн пользовательского интерфейса. Снимок экрана вкладки "Общие" в Realm

person Vitaliy Markitanov    schedule 18.01.2019

После долгих поисков мы смогли более или менее очистить информацию (в основном из собственной клиентской библиотеки JS Keycloak):

  • Конечная точка авторизации: /auth/realms/{realm}/tokens/login
  • Конечная точка токена: /auth/realms/{realm}/tokens/access/codes

Что касается OpenID Connect UserInfo, прямо сейчас (1.1.0.Final) Keycloak не реализует эту конечную точку, поэтому он не полностью совместим с OpenID Connect. Однако уже существует патч, который добавляет, что на момент написания статьи он должен быть включен в 1.2. .Икс.

Но - по иронии судьбы 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.

person Amir Abiri    schedule 23.02.2015

В версии 1.9.0 json со всеми конечными точками находится по адресу / auth / realms / {realm}

  • Конечная точка авторизации: / auth / realms / {realm} / account
  • Конечная точка токена: / auth / realms / {realm} / protocol / openid-connect
person Krzysztof Pobozan    schedule 09.04.2016

Вы также можете увидеть эту информацию, перейдя в Консоль администратора -> Настройки области -> Щелкнув гиперссылку в поле Конечные точки.

введите описание изображения здесь

person Anwar Husain    schedule 02.05.2020
comment
Вы знаете, где можно найти документацию по этим конечным точкам? - person raarts; 02.06.2020
comment
вы, я думаю, документация могла бы быть немного удобной для пользователя - person Rohit Kumar; 08.07.2020

версия keycloak: 4.6.0

  • TokenUrl: [домен] / auth / realms / {REALM_NAME} / protocol / openid-connect / token
  • AuthUrl: [домен] / auth / realms / {REALM_NAME} / protocol / openid-connect / auth
person user1653042    schedule 07.12.2018
comment
да, это верно и для 5.0. Они задокументированы здесь: keycloak.org/docs/ 5.0 / server_admin / - person JP Lew; 16.08.2019

Следующая ссылка Предоставляет документ 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"
}
person ravthiru    schedule 07.06.2019

Полное доменное имя / auth / realms / {realm_name} /. Well-known / openid-configuration

вы увидите все здесь, плюс, если поставщик удостоверений также является Keycloak, то при подаче этого URL-адреса все будет также верно и с другими поставщиками удостоверений, если они поддерживают и уже обработали его.

person Haseb Ansari    schedule 11.04.2018