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.


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


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.


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.



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

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

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


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


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"
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.