Was sind die OAuth2 / OpenID Connect-Endpunkte von Keycloak?

94

Wir versuchen, Keycloak als SSO-Lösung zu bewerten, und es sieht in vielerlei Hinsicht gut aus, aber die Dokumentation enthält schmerzlich keine Grundlagen.

Was sind für eine bestimmte Keycloak-Installation in http://localhost:8080/for Realm testder OAuth2-Autorisierungsendpunkt , der OAuth2-Token-Endpunkt und der OpenID Connect UserInfo-Endpunkt ?

Wir sind nicht an der Verwendung der eigenen Clientbibliothek von Keycloak interessiert. Wir möchten Standard-OAuth2 / OpenID Connect-Clientbibliotheken verwenden, da die Clientanwendungen, die den Keycloak-Server verwenden, in einer Vielzahl von Sprachen (PHP, Ruby, Node, Java, C #) geschrieben werden , Angular). Daher sind die Beispiele, die den Keycloak-Client verwenden, für uns nicht von Nutzen.

Amir Abiri
quelle
1
Was haben Sie stattdessen verwendet?
Ced
1
Im Obergeschoss konnten wir endlich überzeugen, dass OAuth nichts mit Login und Sicherheit als Technologie für die Anwendung selbst zu tun hat und nur für die Integration mit Dritten relevant ist. Es war schwer zu erklären, dass Google & FB, das es überall verwendet, für uns keine Relevanz hat.
Amir Abiri
4
@AmirAbiri würde nicht sagen, dass es nur für die Integration von Drittanbietern verwendet wird. Dies ist heutzutage die Hauptanwendung, aber als Protokoll, das immer mehr Internetunternehmen unterstützen, kann es auch sinnvoll sein, wenn Sie mit mehreren Anwendungen (oder Microservices) in Ihrer eigenen Unternehmensumgebung arbeiten und eine SSO-Lösung wünschen. In meinem Fall, nachdem ich Keycloak seit mehr als 10 Monaten verwendet habe, denke ich, dass es auch für einfache Anwendungen verdient sein könnte, da es sich um alle Dinge der Benutzerverwaltung kümmert.
Xtreme Biker

Antworten:

122

Für Keycloak 1.2 können die oben genannten Informationen über die URL abgerufen werden

http: // keycloakhost: keycloakport / auth / realms / {Realm} /. bekannte / openid-Konfiguration

Wenn der Realm-Name beispielsweise Demo lautet :

http: // keycloakhost: keycloakport / auth / realms / demo / .well-bekannte / openid-konfiguration

Eine Beispielausgabe der obigen 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"
    ]
}

Informationen finden Sie unter https://issues.jboss.org/browse/KEYCLOAK-571

Hinweis: Möglicherweise müssen Sie Ihren Client zur Liste der gültigen Umleitungs-URIs hinzufügen

Kann nicht sagen
quelle
1
Wir haben seitdem Keycloak verworfen, daher kann ich es nicht überprüfen.
Amir Abiri
Welche URL würde man verwenden, um einen Login-Link in einer Web-App zu haben? Sie haben alle ausprobiert, aber das tun sie nicht
Ced
2
@AmirAbiri was ist deine Alternative zu KeyCloak? Ich bewerte es gerade. Es mag die Benutzeroberfläche und möchte, dass alle meine Benutzer von ihr verwaltet werden, aber es fällt mir schwer, meine GoLang-Anwendung darauf zuzugreifen.
Tarion
@Tarion Zum einen gibt es einen WSO2-Identitätsserver.
Kann nicht sagen,
19

Mit Version 1.9.3.Finale verfügt Keycloak über eine Reihe von OpenID-Endpunkten. Diese finden Sie unter /auth/realms/{realm}/.well-known/openid-configuration. Angenommen, Ihr Realm heißt benannt demo, erzeugt dieser Endpunkt eine ähnliche JSON-Antwort.

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

Soweit ich festgestellt habe, implementieren diese Endpunkte die Oauth 2.0- Spezifikation.

Lanceball
quelle
Beachten Sie, dass OpenID Connect im Grunde eine Reihe von Standards ist, von denen OAuth 2 einer ist (JWT ist ein anderer)
Stijn de Witt
2
Dieser Kommentar ist etwas irreführend. OAuth2 ist ein Standard zur Implementierung eines Protokolls für die Autorisierung. OIDC ist ein Standard, der zur Identifizierung auf OAuth2 aufbaut.
Thomas Lann
15

Nach langem Stöbern konnten wir die Informationen mehr oder weniger kratzen (hauptsächlich aus Keycloaks eigener JS-Client-Bibliothek):

  • Autorisierungsendpunkt: /auth/realms/{realm}/tokens/login
  • Token-Endpunkt: /auth/realms/{realm}/tokens/access/codes

Was OpenID Connect UserInfo betrifft , implementiert Keycloak diesen Endpunkt derzeit (1.1.0.Final) nicht, sodass es nicht vollständig OpenID Connect-kompatibel ist. Es gibt jedoch bereits einen Patch , der hinzufügt, dass zum jetzigen Zeitpunkt in 1.2.x enthalten sein sollte.

Aber - Ironischerweise sendet Keycloak id_tokenzusammen mit dem Zugriffstoken ein In zurück. Sowohl die id_tokenals auch die access_tokensind signierte JWTs , und die Schlüssel des Tokens sind die Schlüssel von OpenID Connect, dh:

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

Während Keycloak 1.1.x nicht vollständig OpenID Connect-kompatibel ist, "spricht" es in der OpenID Connect-Sprache.

Amir Abiri
quelle
12

Tatsächlich befindet sich der Link zu .well-knowauf der ersten Registerkarte Ihrer Realm-Einstellungen - aber der Link sieht nicht wie ein Link aus, sondern als Wert des Textfelds ... schlechtes UI-Design. Screenshot der Registerkarte "Allgemein" von Realm

Vitaliy Markitanov
quelle
7

In Version 1.9.0 befindet sich json mit allen Endpunkten unter der Adresse / auth / realms / {Realm}

  • Autorisierungsendpunkt: / auth / realms / {Realm} / account
  • Token-Endpunkt: / auth / realms / {Realm} / protocol / openid-connect
Krzysztof Pobozan
quelle
3

Schlüsselumhang Version: 4.6.0

  • TokenUrl: [Domäne] / auth / realms / {REALM_NAME} / protocol / openid-connect / token
  • AuthUrl: [Domäne] / auth / realms / {REALM_NAME} / protocol / openid-connect / auth
user1653042
quelle
Ja, dies gilt auch für 5.0. Sie sind hier dokumentiert: keycloak.org/docs/5.0/server_admin/…
JP Lew
2

FQDN / auth / realms / {Realm_name} /. Bekannte / openid-Konfiguration

Hier sehen Sie alles. Wenn der Identitätsanbieter auch Keycloak ist, wird durch das Füttern dieser URL alles auch für andere Identitätsanbieter eingerichtet, wenn diese dies unterstützen und bereits erledigt haben

Haseb Ansari
quelle
2

Sie können diese Informationen auch anzeigen, indem Sie in der Admin-Konsole -> Realm-Einstellungen -> auf den Hyperlink im Feld Endpunkte klicken.

Geben Sie hier die Bildbeschreibung ein

Anwar Husain
quelle
1
Wissen Sie, wo sich die Dokumentation zu diesen Endpunkten befindet?
Raarts
Ich glaube, die Dokumentation hätte ein bisschen benutzerfreundlich sein können
Rohit Kumar
1

Folgender Link Stellt ein JSON-Dokument bereit, das Metadaten zum Keycloak beschreibt

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

Die folgenden Informationen wurden mit Keycloak 6.0.1 für masterRealm gemeldet

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