Що таке кінцеві точки OAuth2 / OpenID Connect Keycloak?


99

Ми намагаємось оцінити Keycloak як рішення для єдиного входу, і воно багато в чому виглядає добре, але в документації болісно не вистачає основ.

Для даної установки Keycloak на http://localhost:8080/для області test, які OAuth2 авторизації Endpoint , OAuth2 Токен Endpoint і OpenID Connect UserInfo Endpoint ?

Ми не зацікавлені у використанні власної клієнтської бібліотеки Keycloak, ми хочемо використовувати стандартні клієнтські бібліотеки OAuth2 / OpenID Connect, оскільки клієнтські програми, що використовують сервер keycloak, будуть написані широким колом мов (PHP, Ruby, Node, Java, C # , Кутовий). Тому приклади, які використовують клієнт Keycloak, для нас не корисні.


1
Що ви в результаті використали замість цього?
Ced

1
Нарешті ми змогли переконатись нагорі, що OAuth не має нічого спільного з логіном та безпекою як технологією, що використовується в самому додатку, і має значення лише для інтеграції з третіми сторонами. Важко було пояснити той факт, що Google та FB, використовуючи його всюди, не мають для нас ніякого відношення.
Амір Абірі

5
@AmirAbiri не сказав би, що він використовується лише для інтеграції третьої сторони. Це його основне використання на сьогодні, але, будучи протоколом, який підтримує все більше і більше інтернет-компаній, може мати сенс також, якщо ви маєте справу з декількома програмами (або мікросервісами) у вашому власному корпоративному середовищі, і ви хочете рішення SSO. Насправді в моєму випадку, використовуючи плащ ключів вже більше 10 місяців, я думаю, що це також заслуговує на прості додатки, оскільки він опікується всіма матеріалами управління користувачами.
Xtreme Biker

Відповіді:


129

Для Keycloak 1.2 вищезазначену інформацію можна отримати за URL-адресою

http: // keycloakhost: keycloakport / auth / realms / {realm} /. добре відомий / openid-configuration

Наприклад, якщо ім'я царства демонстраційне :

http: // keycloakhost: keycloakport / auth / realms / demo /. добре відомий / 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 переадресації


1
З тих пір ми відкидаємо використання Keycloak, тому я не можу перевірити.
Амір Абірі

Яку URL-адресу можна використовувати, щоб мати посилання для входу у веб-програму? Ви спробували все це, але вони цього не роблять
Ced

2
@AmirAbiri яка ваша альтернатива KeyCloak? В даний час я оцінюю це. Він подобається користувальницькому інтерфейсу і хотів би, щоб усі мої користувачі ним керували, але мені важко приєднати до нього свою програму GoLang.
Таріон

@Tarion Існує сервер ідентифікації WSO2, для одного.
Не можу сказати

20

У версії 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 .


Зверніть увагу, що OpenID Connect в основному являє собою набір стандартів, один з яких OAuth 2 (JWT - інший)
Stijn de Witt

2
Цей коментар дещо вводить в оману. OAuth2 - це стандарт для реалізації протоколу авторизації. OIDC - це стандарт, який працює поверх OAuth2 для ідентифікації.
Thomas


15

Після довгих копань ми змогли зібрати інформацію більш-менш (головним чином із власної бібліотеки клієнта JS Keycloak):

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

Що стосується OpenIn Connect UserInfo , то зараз (1.1.0.Final) Keycloak не реалізує цю кінцеву точку, тому він не повністю відповідає OpenID Connect. Однак вже існує виправлення, яке додає, що станом на цей час це має бути включено в 1.2.x.

Але - за іронією долі, Keycloak дійсно надсилає назад id_tokenразом із маркером доступу. Обидва , id_tokenі access_tokenбудуть підписані JWTs і ключі лексеми ключі OpenID Connect, тобто:

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

Отже, хоча Keycloak 1.1.x не повністю сумісний з OpenID Connect, він «говорить» мовою OpenID Connect.


7

У версії 1.9.0 json з усіма кінцевими точками знаходиться за адресою / auth / realms / {realm}

  • Кінцева точка авторизації : / auth / realms / {realm} / account
  • Кінцева точка маркера: / auth / realms / {realm} / protocol / openid-connect

6

Ви також можете переглянути цю інформацію, перейшовши в Admin Console -> Realm Settings -> Клацнувши гіперпосилання в полі Endpoints

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


1
Чи знаєте ви, де можна знайти документацію щодо цих кінцевих точок?
raarts

Ви відчуваєте, що документація могла бути трохи зручною для користувача
Рохіт Кумар,


2

FQDN / auth / realms / {realm_name} /. Добре відомий / openid-конфігурація

ви побачите все тут, плюс якщо постачальник ідентифікаційних даних також є Keycloak, тоді подача цієї URL-адреси налаштує все так само, як і у інших постачальників ідентифікаторів, якщо вони підтримують, і вони вже обробляли це


2

Наступне посилання містить документ 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"
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.