ข้ามไปยังเนื้อหา

OIDC Discovery Document

Keycloak realm ทุกตัวเผยแพร่ OpenID Connect discovery document ที่ /.well-known/openid-configuration ใต้ /realms/<realm>

URL เต็ม:

https://<keycloak-host>/realms/<realm>/.well-known/openid-configuration

นี่คือแหล่งข้อมูลเดียวสำหรับทุก endpoint ที่แอปต้องการ fetch ครั้งเดียวตอนเริ่มต้นและคุณจะได้ทุกอย่าง — authorization endpoint, token endpoint, JWKS URI และอื่น ๆ

ชื่อ endpointJSON keyวัตถุประสงค์
Authorization endpointauthorization_endpointRedirect ผู้ใช้ไปยังหน้า login
Token endpointtoken_endpointแลก authorization code เป็น token
UserInfo endpointuserinfo_endpointส่งคืน claim เกี่ยวกับผู้ใช้ที่ยืนยันตัวตนแล้ว
JWKS URIjwks_uriPublic key สำหรับยืนยัน JWT signature
End session endpointend_session_endpointLogout ผู้ใช้

แทนที่ KC_URL และ REALM ด้วยค่าของคุณ การตอบกลับจะเป็น JSON object ที่มี URL ของ endpoint ทั้งหมดข้างต้น

curl https://${KC_URL}/realms/${REALM}/.well-known/openid-configuration | jq .
ตัวเลือกBenefitCost
ใช้ OIDC discovery documentแอปดึง config อัตโนมัติ ไม่ต้อง hardcode endpoint แต่ละตัวต้องมี network call เพิ่มตอน startup และต้อง cache ให้ดีเพื่อไม่ให้ดึงซ้ำทุก request
Hardcode endpoint URL เองเริ่มต้นเร็ว ไม่ต้องพึ่ง discovery documentเมื่อ Keycloak ย้าย realm หรือเปลี่ยน URL ต้องไปแก้โค้ดทุกที่ที่ hardcode ไว้
  • สับสนระหว่าง OAuth2 กับ OIDC — OAuth2 คือ authorization framework (ให้สิทธิ์เข้าถึงทรัพยากร) ส่วน OIDC เป็น identity layer ที่สร้างต่อบน OAuth2 (บอกว่าใครคือผู้ใช้) ต้องขอ scope=openid เท่านั้นถึงจะได้ id_token กลับมา
  • ไม่ตรวจสอบ issuer ใน discovery document — ก่อนเชื่อ endpoint ใด ๆ ควร verify ว่า issuer ตรงกับ Keycloak realm ที่คาดไว้ ไม่งั้นเสี่ยงต่อการถูกหลอกให้เชื่อ discovery document ปลอม
  • Cache discovery document ไว้ตลอดชีพ ไม่เคย refresh — ถ้า Keycloak หมุน key หรือย้าย endpoint แอปที่ cache ค่าเก่าไว้ถาวรจะพังแบบไม่มีสัญญาณเตือน ควรตั้ง TTL หรือ refresh เป็นระยะ

💡 ตัวอย่างจากของจริง

ปุ่ม “Log in with Google” หรือ “Log in with GitHub” — เบื้องหลังคือ OIDC เต็มรูปแบบ แอปจะดึง discovery document ของ Google/GitHub ก่อนเพื่อรู้ authorization endpoint และ token endpoint แล้วค่อยเริ่ม flow

Auth0 และ Okta — เป็น Identity Provider (IdP) เชิงพาณิชย์ที่ใช้ pattern discovery document แบบเดียวกับ Keycloak ทำให้แอปสลับ provider ได้โดยแทบไม่ต้องแก้โค้ด เพราะทุกตัวพูดภาษา OIDC เดียวกัน

Keycloak เผยแพร่ OIDC discovery document ที่ไหน?
JSON key ใดใน discovery document ให้ token endpoint?
JWKS URI ใช้ทำอะไร?
เหตุใดแอปควร fetch discovery document แทนการ hardcode endpoint?