Keycloak के OAuth2 / OpenID कनेक्ट एंडपॉइंट क्या हैं?


99

हम SSO समाधान के रूप में कीक्लोक का मूल्यांकन करने की कोशिश कर रहे हैं, और यह कई मामलों में अच्छा लग रहा है, लेकिन प्रलेखन मूल रूप से दर्द में कमी है।

http://localhost:8080/दायरे के लिए दिए गए कीक्लॉक इंस्टालेशन के लिए test, OAuth2 ऑथराइजेशन एंडपॉइंट , OAuth2 टोकन एंडपॉइंट और ओपेनआईडी कनेक्ट यूजरइन्फो एंडपॉइंट क्या हैं?

हम Keycloak की अपनी क्लाइंट लाइब्रेरी का उपयोग करने में रुचि नहीं रखते हैं, हम मानक OAuth2 / OpenID कनेक्ट क्लाइंट लाइब्रेरी का उपयोग करना चाहते हैं, क्योंकि keycloak सर्वर का उपयोग करने वाले क्लाइंट एप्लिकेशन को भाषाओं की एक विस्तृत श्रृंखला में लिखा जाएगा (PHP, Ruby, Node, Java, C # , कोणीय)। इसलिए कीक्लॉक क्लाइंट का उपयोग करने वाले उदाहरण हमारे लिए उपयोग के नहीं हैं।


1
इसके बजाय आपने क्या किया?
सीएसएस

1
हम अंत में यह समझाने में सक्षम थे कि OAuth का लॉगिन और सुरक्षा से कोई लेना-देना नहीं है क्योंकि यह एक तकनीक के रूप में अनुप्रयोग में ही उपयोग होता है, और केवल 3 पार्टियों के साथ एकीकरण के लिए प्रासंगिक है। इस तथ्य की व्याख्या करना कठिन था कि Google और FB का हर जगह उपयोग करने से हमारी कोई प्रासंगिकता नहीं है।
अमीर अबिरी

5
@AmirAbiri यह नहीं कहेगा कि इसे केवल 3 पार्टी एकीकरण के लिए उपयोग किया जाता है। यह आजकल इसका मुख्य उपयोग है, लेकिन, एक प्रोटोकॉल होने के नाते जो अधिक से अधिक इंटरनेट कंपनियों का समर्थन करता है, यह भी समझ में आ सकता है कि क्या आप अपने स्वयं के उद्यम वातावरण में कई अनुप्रयोगों (या माइक्रोसर्विस) के साथ काम कर रहे हैं और आप एक एसएसओ समाधान चाहते हैं। वास्तव में मेरे मामले में, 10 महीने से अधिक समय तक की-क्लोक का उपयोग करने के बाद, मुझे लगता है कि यह सरल अनुप्रयोगों के लिए भी योग्य हो सकता है, क्योंकि यह सभी उपयोगकर्ता प्रबंधन सामानों की देखभाल करता है।
Xtreme बाइकर

जवाबों:


129

Keycloak 1.2 के लिए उपरोक्त जानकारी url के माध्यम से प्राप्त की जा सकती है

http: // keycloakhost: keycloakport / schem / realms / {realm} /। अच्छी तरह से जाना जाता है / खुले विन्यास।

उदाहरण के लिए, यदि वास्तविक नाम डेमो है :

http: // keycloakhost: keycloakport / प्रमाणन / स्थानों / डेमो / .well प्रसिद्ध / 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
हमने तब से कीक्लॉक का उपयोग करना छोड़ दिया है, इसलिए मैं सत्यापित नहीं कर सकता।
अमीर अबिरी

किसी वेब ऐप पर लॉगिन लिंक का उपयोग करने के लिए कौन-सा URL उपयोग करेगा? यू उन सभी की कोशिश की, लेकिन उन्होंने ऐसा नहीं है
Ced

2
@AmirAbiri KeyCloak का आपका विकल्प क्या है? मैं वर्तमान में इसका मूल्यांकन कर रहा हूं। यह UI की तरह है और मेरे सभी उपयोगकर्ता इसके द्वारा प्रबंधित करना चाहते हैं, लेकिन मेरे पास इसके 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 कनेक्ट मूल रूप से मानकों का एक सेट है, जिनमें से OAuth 2 एक है (JWT एक और है)
Stijn de Witt

2
यह टिप्पणी कुछ भ्रामक है। OAuth2 प्राधिकरण के लिए एक प्रोटोकॉल को लागू करने के लिए एक मानक है। OIDC एक मानक है जो पहचान के लिए OAuth2 के शीर्ष पर काम करता है।
थॉमस लैन

16

वास्तव में लिंक .well-knowआपके दायरे सेटिंग्स के पहले टैब पर है - लेकिन लिंक लिंक की तरह नहीं दिखता है, लेकिन टेक्स्ट बॉक्स के मूल्य के रूप में ... खराब यूआई डिजाइन। दायरे के जनरल टैब का स्क्रीनशॉट


15

चारों ओर बहुत खुदाई करने के बाद हम जानकारी को अधिक या कम परिमार्जन करने में सक्षम थे (मुख्य रूप से कीक्लॉक के अपने जेएस क्लाइंट काम से):

  • प्राधिकरण समापन बिंदु: /auth/realms/{realm}/tokens/login
  • टोकन समापन बिंदु: /auth/realms/{realm}/tokens/access/codes

के रूप में जगह OpenID 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 कनेक्ट अनुरूप नहीं है, यह OpenID कनेक्ट भाषा में "बोलता" है।


7

सभी एंडपॉइंट्स के साथ संस्करण 1.9.0 json में एड्रेस / ऑर्टिकल / रियलम्स / {realm} पर है

  • प्राधिकरण समापन बिंदु: / सामान्य / क्षेत्र / {realm} / खाता
  • टोकन समापन बिंदु: / स्थिति / क्षेत्र / {realm} / प्रोटोकॉल / ओपनिड-कनेक्ट

6

आप इस जानकारी को व्यवस्थापक कंसोल -> दायरे सेटिंग्स -> पर क्लिक करके हाइपरलिंक पर क्लिक करके एंडपॉइंट फ़ील्ड पर भी देख सकते हैं।

यहाँ छवि विवरण दर्ज करें


1
क्या आप जानते हैं कि इन समापन बिंदुओं के लिए दस्तावेज़ कहाँ मिल सकते हैं?
raarts

मुझे लगता है कि प्रलेखन उपयोगकर्ता के लिए थोड़ा सा हो सकता है
रोहित कुमार

3

कीलक संस्करण: 4.6.0

  • TokenUrl: [डोमेन] / सामान्य / क्षेत्र / {REALM_NAME} / प्रोटोकॉल / ओपन-कनेक्ट / टोकन
  • प्रामाणिक: [डोमेन] / नियम / क्षेत्र / {REALM_NAME} / प्रोटोकॉल / ओपनिड-कनेक्ट / स्थिति

हां, यह 5.0 के लिए भी मान्य है। वे यहाँ प्रलेखित हैं: keycloak.org/docs/5.0/server_admin/…
JP Lew

2

FQDN / प्रमाणन / स्थानों / {realm_name} /। प्रसिद्ध / openid-विन्यास

आपको यहां सब कुछ दिखाई देगा, साथ ही अगर पहचान प्रदाता भी Keycloak है, तो इस URL को खिलाने से अन्य पहचान प्रदाताओं के साथ भी सब कुछ सही हो जाएगा यदि वे समर्थन करते हैं और उन्होंने पहले ही इसे संभाला है


2

निम्नलिखित लिंक Keycloak के बारे में मेटाडेटा का वर्णन JSON दस्तावेज़ प्रदान करता है

/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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.