Keycloak'ın OAuth2 / OpenID Connect uç noktaları nelerdir?


100

Keycloak'ı bir SSO çözümü olarak değerlendirmeye çalışıyoruz ve pek çok açıdan iyi görünüyor, ancak dokümantasyon temelde acı verici bir şekilde eksik.

Üzerinde belirli bir Keycloak kurulum için http://localhost:8080/alemine için test, ne OAuth2 Yetkilendirme Endpoint , OAuth2 Jetonu Endpoint ve OpenID Bağlan UserInfo Endpoint ?

Keycloak'ın kendi istemci kitaplığını kullanmakla ilgilenmiyoruz, keycloak sunucusunu kullanan istemci uygulamaları çok çeşitli dillerde (PHP, Ruby, Node, Java, C #) yazılacağından, standart OAuth2 / OpenID Connect istemci kitaplıklarını kullanmak istiyoruz. , Açısal). Bu nedenle Keycloak istemcisini kullanan örnekler bizim işimize yaramaz.


1
Bunun yerine ne kullandın?
Ced

1
Nihayet üst katta, OAuth'un uygulamanın kendisinde kullanılacak bir teknoloji olarak oturum açma ve güvenlikle hiçbir ilgisi olmadığına ve yalnızca 3. taraflarla entegrasyonla ilgili olduğuna ikna edebildik. Google ve FB'nin onu her yerde kullanmasının bizimle hiçbir ilgisi olmadığı gerçeğini açıklamak zordu.
Amir Abiri

6
@AmirAbiri, yalnızca 3. parti entegrasyon için kullanıldığını söylemez. Günümüzde ana kullanımı budur, ancak giderek daha fazla internet şirketinin desteklediği bir protokol olarak, kendi kurumsal ortamınızda birden fazla uygulama (veya mikro hizmet) ile uğraşıyorsanız ve bir SSO çözümü istiyorsanız da mantıklı olabilir. Aslında benim durumumda, keycloak'ı 10 aydan fazla bir süredir kullandığım için, tüm kullanıcı yönetimi işleriyle ilgilendiği için basit uygulamaları da hak edebileceğini düşünüyorum.
Xtreme Biker

Yanıtlar:


133

Keycloak 1.2 için yukarıdaki bilgiler url aracılığıyla alınabilir

http: // keycloakhost: keycloakport / auth / realms / {realm} /. iyi bilinen / openid-configuration

Örneğin, bölge adı demo ise :

http: // keycloakhost: keycloakport / auth / realms / demo /. iyi bilinen / openid-configuration

Yukarıdaki url'den bir örnek çıktı:

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

Bilgiler https://issues.jboss.org/browse/KEYCLOAK-571 adresinde bulunur.

Not: İstemcinizi Geçerli Yeniden Yönlendirme URI listesine eklemeniz gerekebilir


1
O zamandan beri Keycloak kullanarak attık, bu yüzden doğrulayamıyorum.
Amir Abiri

Bir web uygulamasında oturum açma bağlantısına sahip olmak için hangi URL kullanılır? Bunların hepsini denediniz ama yapmıyorlar
Ced

2
@AmirAbiri KeyCloak'a alternatifiniz nedir? Şu anda değerlendiriyorum. Kullanıcı arayüzü gibi ve tüm kullanıcılarımın onun tarafından yönetilmesini istiyor, ancak GoLang uygulamamı ona uydurmakta zorlanıyorum.
Tarion

@Tarion Biri için WSO2 kimlik sunucusu var.
söylenemiyor

20

1.9.3.Final sürümüyle birlikte, Keycloak bir dizi OpenID uç noktasına sahiptir. Bunlar bulunabilir /auth/realms/{realm}/.well-known/openid-configuration. Bölgenizin adlandırıldığını varsayarsak demo, bu uç nokta buna benzer bir JSON yanıtı üretecektir.

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

Bulduğum kadarıyla, bu uç noktalar Oauth 2.0 spesifikasyonunu uyguluyor .


OpenID Bağlan temelde OAuth 2 biri olduğu standartlar seti olduğunu Not (JWT başka bir şeydir)
Stijn de Witt

2
Bu yorum biraz yanıltıcıdır. OAuth2, yetkilendirme için bir protokol uygulamaya yönelik bir standarttır. OIDC, tanımlama için OAuth2'nin üzerinde çalışan bir standarttır.
Thomas Lann


15

Etrafta çok fazla araştırma yaptıktan sonra, bilgileri aşağı yukarı kazıyabildik (esas olarak Keycloak'ın kendi JS istemci kütüphanesinden):

  • Yetkilendirme Uç Noktası: /auth/realms/{realm}/tokens/login
  • Token Bitiş Noktası: /auth/realms/{realm}/tokens/access/codes

OpenID Connect UserInfo'ya gelince , şu anda (1.1.0.Final) Keycloak bu uç noktayı uygulamıyor, bu yüzden tamamen OpenID Connect uyumlu değil. Ancak, bu yazı itibariyle 1.2.x'e dahil edilmesi gerektiğini ekleyen bir yama zaten var.

Ancak - ironik bir şekilde Keycloak id_token, erişim belirteci ile birlikte geri gönderir . Hem id_tokenve access_tokenedilir imzalı JWTS ve belirteç anahtarları yani OpenID Connect'in tuşları şunlardır:

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

Dolayısıyla, Keycloak 1.1.x tam olarak OpenID Connect uyumlu olmasa da, OpenID Connect dilinde "konuşur".


7

1.9.0 sürümünde tüm uç noktalara sahip json adres / auth / realms / {realm} adresindedir

  • Yetkilendirme Uç Noktası: / auth / realms / {realm} / hesap
  • Jeton Uç Noktası: / auth / realms / {realm} / protocol / openid-connect

6

Bu bilgileri Yönetici Konsolu -> Bölge Ayarları -> Uç Noktalar alanındaki köprüyü tıklayarak da görebilirsiniz.

görüntü açıklamasını buraya girin


1
Bu uç noktalar için belgelerin nerede bulunabileceğini biliyor musunuz?
56'da raarts

Dokümantasyonun kullanıcı dostu olabileceğine
inanıyorum


2

FQDN / auth / realms / {realm_name} /. İyi bilinen / openid-configuration

burada her şeyi göreceksiniz, ayrıca kimlik sağlayıcı da Keycloak ise, bu URL'yi beslemek, desteklediklerinde ve zaten işlemişlerse diğer kimlik sağlayıcıları için de her şeyi doğru kuracaktır


2

Aşağıdaki bağlantı Keycloak ile ilgili meta verileri açıklayan JSON belgesi sağlar

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

masterBölge için Keycloak 6.0.1 ile bildirilen aşağıdaki bilgiler

{  
   "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"
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.