Apa itu endpoint OAuth2 / OpenID Connect Keycloak?

100

Kami mencoba mengevaluasi Keycloak sebagai solusi SSO, dan terlihat bagus dalam banyak hal, tetapi dokumentasinya sangat kurang dalam dasar-dasarnya.

Untuk penginstalan Keycloak tertentu di http://localhost:8080/realm test, apa itu OAuth2 Authorization Endpoint , OAuth2 Token Endpoint, dan OpenID Connect UserInfo Endpoint ?

Kami tidak tertarik menggunakan pustaka klien Keycloak sendiri, kami ingin menggunakan pustaka klien standar OAuth2 / OpenID Connect, karena aplikasi klien yang menggunakan server keycloak akan ditulis dalam berbagai bahasa (PHP, Ruby, Node, Java, C # , Angular). Oleh karena itu, contoh yang menggunakan klien Keycloak tidak berguna bagi kami.

Amir Abiri
sumber
1
Apa yang akhirnya Anda gunakan?
Menyerahkan
1
Kami akhirnya dapat meyakinkan di lantai atas bahwa OAuth tidak ada hubungannya dengan login dan keamanan sebagai teknologi untuk digunakan dalam aplikasi itu sendiri, dan hanya relevan untuk berintegrasi dengan pihak ketiga. Sulit untuk menjelaskan fakta bahwa Google & FB yang menggunakannya di mana-mana tidak ada relevansinya dengan kami.
Amir Abiri
6
@AmirAbiri tidak akan mengatakan itu digunakan untuk integrasi pihak ke-3 saja. Itulah kegunaan utamanya saat ini, tetapi, menjadi protokol yang semakin banyak didukung oleh perusahaan internet, mungkin masuk akal juga jika Anda berurusan dengan banyak aplikasi (atau layanan mikro) di lingkungan perusahaan Anda sendiri dan Anda menginginkan solusi SSO. Sebenarnya dalam kasus saya, setelah menggunakan keycloak selama lebih dari 10 bulan sekarang, saya pikir itu mungkin juga layak untuk aplikasi sederhana, karena menangani semua hal manajemen pengguna.
Xtreme Biker

Jawaban:

133

Untuk Keycloak 1.2 informasi di atas dapat diambil melalui url

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

Misalnya, jika nama realme adalah demo :

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

Contoh keluaran dari url di atas:

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

Informasi ditemukan di https://issues.jboss.org/browse/KEYCLOAK-571

Catatan: Anda mungkin perlu menambahkan klien Anda ke daftar URI Pengalihan Valid

Tidak Bisa Memberitahu
sumber
1
Kami sejak saat itu telah membuang penggunaan Keycloak, jadi saya tidak dapat memverifikasi.
Amir Abiri
URL apa yang akan digunakan seseorang untuk memiliki tautan masuk di aplikasi web? U mencoba semua itu tetapi mereka tidak melakukannya
Ced
2
@AmirAbiri apa alternatif Anda untuk KeyCloak? Saya sedang mengevaluasinya. Ia menyukai UI dan ingin semua pengguna saya dikelola olehnya tetapi saya mengalami kesulitan menyesuaikan aplikasi GoLang saya dengannya.
Tarion
@Tarion Ada server identitas WSO2, untuk satu.
Can't Tell
20

Dengan versi 1.9.3. Final, Keycloak memiliki sejumlah titik akhir OpenID yang tersedia. Ini dapat ditemukan di /auth/realms/{realm}/.well-known/openid-configuration. Dengan asumsi ranah Anda diberi nama demo, titik akhir itu akan menghasilkan respons JSON yang serupa dengan ini.

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

Sejauh yang saya temukan, titik akhir ini mengimplementasikan spesifikasi Oauth 2.0 .

lanceball
sumber
Perhatikan bahwa OpenID Connect pada dasarnya adalah seperangkat standar, di mana OAuth 2 adalah salah satunya (JWT adalah yang lain)
Stijn de Witt
2
Komentar ini agak menyesatkan. OAuth2 adalah standar untuk menerapkan protokol untuk otorisasi. OIDC adalah standar yang berfungsi di atas OAuth2 untuk identifikasi.
Thomas Lann
16

Sebenarnya tautan ke .well-knowada di tab pertama pengaturan ranah Anda - tetapi tautan tidak terlihat seperti tautan, tetapi sebagai nilai kotak teks ... desain ui yang buruk. Screenshot Tab Umum Realm

Vitaliy Markitanov
sumber
15

Setelah banyak menggali, kami dapat mengikis info lebih banyak atau lebih sedikit (terutama dari lib klien JS Keycloak sendiri):

  • Titik Akhir Otorisasi: /auth/realms/{realm}/tokens/login
  • Token Endpoint: /auth/realms/{realm}/tokens/access/codes

Sedangkan untuk OpenID Connect UserInfo , saat ini (1.1.0.Final) Keycloak tidak mengimplementasikan endpoint ini, jadi tidak sepenuhnya sesuai dengan OpenID Connect. Namun demikian, sudah ada patch yang menambahkan bahwa saat tulisan ini dibuat harus dimasukkan ke dalam 1.2.x.

Tapi - Ironisnya Keycloak mengirim kembali id_tokenbersama dengan token akses. Baik id_tokendan access_tokenyang JWTs ditandatangani , dan kunci-kunci token adalah kunci OpenID Connect ini, yaitu:

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

Jadi, meskipun Keycloak 1.1.x tidak sepenuhnya kompatibel dengan OpenID Connect, ia "berbicara" dalam bahasa OpenID Connect.

Amir Abiri
sumber
7

Dalam versi 1.9.0 json dengan semua titik akhir ada di alamat / auth / realms / {realm}

  • Titik Akhir Otorisasi: / auth / realms / {realm} / account
  • Token Endpoint: / auth / realms / {realm} / protocol / openid-connect
Krzysztof Pobozan
sumber
6

Anda juga dapat melihat informasi ini dengan masuk ke Konsol Admin -> Pengaturan Realm -> Mengklik hyperlink di bidang Titik Akhir.

masukkan deskripsi gambar di sini

Anwar Husain
sumber
1
Tahukah Anda di mana dokumentasi dapat ditemukan untuk titik akhir ini?
raarts
Anda, saya merasa bahwa dokumentasi mungkin sedikit lebih ramah pengguna
Rohit Kumar
3

versi keycloak: 4.6.0

  • TokenUrl: [domain] / auth / realms / {REALM_NAME} / protocol / openid-connect / token
  • AuthUrl: [domain] / auth / realms / {REALM_NAME} / protocol / openid-connect / auth
pengguna1653042
sumber
ya, ini juga berlaku untuk 5.0. Mereka didokumentasikan di sini: keycloak.org/docs/5.0/server_admin/…
JP Lew
2

FQDN / auth / realms / {realm_name} /. Well-known / openid-configuration

Anda akan melihat semuanya di sini, ditambah jika penyedia identitas juga Keycloak, maka memberi makan URL ini akan mengatur semuanya juga benar dengan penyedia identitas lain jika mereka mendukung dan mereka sudah menanganinya

Haseb Ansari
sumber
2

Tautan berikut Menyediakan dokumen JSON yang menjelaskan metadata tentang Keycloak

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

Informasi berikut dilaporkan dengan Keycloak 6.0.1 untuk masterrealm

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