KeycloakのOAuth2 / OpenID Connectエンドポイントとは何ですか?


99

KeycloakをSSOソリューションとして評価しようとしています。多くの点で見栄えがしますが、ドキュメントの基本が非常に不足しています。

http://localhost:8080/レルムtestにインストールされている特定のKeycloakの場合、OAuth2認証エンドポイントOAuth2トークンエンドポイントOpenID Connect UserInfoエンドポイントとは何ですか?

Keycloak独自のクライアントライブラリの使用には関心がありません。keycloakサーバーを使用するクライアントアプリケーションはさまざまな言語(PHP、Ruby、Node、Java、C#)で記述されるため、標準のOAuth2 / OpenIDConnectクライアントライブラリを使用します。 、Angular)。したがって、Keycloakクライアントを使用する例は役に立ちません。


1
代わりに何を使用することになりましたか?
Ced

1
OAuthは、アプリケーション自体で使用するテクノロジーとしてのログインやセキュリティとは関係がなく、サードパーティとの統合にのみ関係することを2階に納得させることができました。GoogleとFBがどこでもそれを使用しているという事実を説明するのは困難でした。
アミールアビリ2016年

6
@AmirAbiriは、サードパーティの統合にのみ使用されているとは言いません。これが今日の主な用途ですが、ますます多くのインターネット企業がサポートするプロトコルであるため、独自のエンタープライズ環境で複数のアプリケーション(またはマイクロサービス)を扱っていて、SSOソリューションが必要な場合にも意味があります。実際、私の場合、キークロークを10か月以上使用しているので、ユーザー管理のすべてを処理するので、単純なアプリケーションにも値すると思います。
エクストリームバイカー2016

回答:


131

Keycloak 1.2の場合、上記の情報はURLから取得できます。

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

たとえば、レルム名がデモの場合

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

上記の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
それ以来、Keycloakを使用して破棄したため、確認できません。
アミールアビリ2015年

Webアプリにログインリンクを設定するには、どのURLを使用しますか?Uはそれらすべてを試しましたが、それはしません
Ced

2
@AmirAbiri KeyCloakに代わるものは何ですか?現在評価中です。UIが好きで、すべてのユーザーにUIを管理してもらいたいのですが、GoLangアプリケーションをUIに接続するのに苦労しています。
タリオン2016

@ Tarion1つにはWSO2IDサーバーがあります。
わからない

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

私の知る限り、これらのエンドポイントはOauth2.0仕様を実装しています。


OpenID Connectは基本的に一連の標準であり、そのうちの1つはOAuth 2です(JWTはもう1つです)
Stijn de Witt

2
このコメントはやや誤解を招くものです。OAuth2は、承認用のプロトコルを実装するための標準です。OIDCは、識別のためにOAuth2上で機能する標準です。
トーマスラン


15

多くのことを掘り下げた後、私たちは多かれ少なかれ情報をこすり取ることができました(主にKeycloak自身のJSクライアントライブラリから):

  • 承認エンドポイント: /auth/realms/{realm}/tokens/login
  • トークンエンドポイント: /auth/realms/{realm}/tokens/access/codes

OpenIDの接続のUserInfoそれは完全にOpenIDの接続に準拠していないので、今(1.1.0.Final)Keycloakは、このエンドポイントを実装していません。ただし、この記事の執筆時点で1.2.xに含める必要があることを追加するパッチがすでにあります。

しかし-皮肉なことに、Keycloakはid_tokenアクセストークンと一緒にを送り返します。どちらid_tokenaccess_tokenされている署名JWTs、およびトークンのキーは、すなわちのOpenID Connectのキーは、以下のとおりです。

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

そのため、Keycloak1.1.xはOpenIDConnectに完全には準拠していませんが、OpenIDConnect言語で「話す」ことができます。


7

バージョン1.9.0では、すべてのエンドポイントを持つjsonはアドレス/ auth / realms / {realm}にあります。

  • 承認エンドポイント: / auth / realms / {realm} / account
  • トークンエンドポイント: / auth / realms / {realm} / protocol / openid-connect

6

この情報は、[管理コンソール]-> [レルム設定]-> [エンドポイント]フィールドのハイパーリンクをクリックして確認することもできます。

ここに画像の説明を入力してください


1
これらのエンドポイントのドキュメントがどこにあるか知っていますか?
raarts

ドキュメントはユーザーフレンドリーなものだったと思います
Rohit Kumar

3

キークロークバージョン:4.6.0

  • TokenUrl:[ドメイン] / auth / realms / {REALM_NAME} / protocol / openid-connect / token
  • AuthUrl:[ドメイン] / auth / realms / {REALM_NAME} / protocol / openid-connect / auth

はい、これは5.0でも有効です。彼らは、ここに記載されています:keycloak.org/docs/5.0/server_admin/...
JPルーを

2

FQDN / auth / realms / {realm_name} /。well-known / openid-configuration

ここにすべてが表示されます。さらに、IDプロバイダーがKeycloakでもある場合、このURLをフィードすると、他のIDプロバイダーがサポートしていて、すでに処理している場合は、他のIDプロバイダーでもすべてが正しく設定されます。


2

次のリンクKeycloakに関するメタデータを説明するJSONドキュメントを提供します

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

masterレルムのKeycloak6.0.1で報告された次の情報

{  
   "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"
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.