KeycloakをSSOソリューションとして評価しようとしていますが、多くの点で見栄えはよくなっていますが、基本的にドキュメントが非常に不足しています。
http://localhost:8080/
上の領域test
に指定されたKeycloakをインストールした場合、 OAuth2承認エンドポイント 、 OAuth2トークンエンドポイント 、および OpenID Connect UserInfo Endpoint ?
Keycloakサーバーを使用するクライアントアプリケーションは幅広い言語(PHP、Ruby、Node、Java、C#)で記述されるため、Keycloakの独自のクライアントライブラリの使用には興味がありません。標準のOAuth2/OpenID Connectクライアントライブラリを使用します。 、Angular)。したがって、Keycloakクライアントを使用する例は役に立たない。
Keycloak 1.2の場合、上記の情報はURLから取得できます
http:// keycloakhost:keycloakport/auth/realms / {realm} /.well-known/openid-configuration
たとえば、レルム名がdemoの場合:
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 で情報を見つけました
注:クライアントをValid Redirect URIリストに追加する必要がある場合があります
バージョン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. 仕様を実装しています。
多くのことを掘り下げた後、情報を多かれ少なかれスクレイピングすることができました(主にKeycloakのJSクライアントライブラリから):
/auth/realms/{realm}/tokens/login
/auth/realms/{realm}/tokens/access/codes
OpenID Connect UserInfoに関しては、現在(1.1.0.Final)Keycloakはこのエンドポイントを実装していないため、OpenID Connectに完全に準拠していません。ただし、すでに patch があり、これを書いている時点で1.2.xに含める必要があることを追加しています。
しかし、-皮肉なことに、Keycloakはid_token
をアクセストークンとともに送り返します。 id_token
とaccess_token
は両方とも signed JWTs であり、トークンのキーはOpenID Connectのキー、つまり:
"iss": "{realm}"
"sub": "5bf30443-0cf7-4d31-b204-efd11a432659"
"name": "Amir Abiri"
"email: "..."
そのため、Keycloak 1.1.xはOpenID Connectに完全に準拠していませんが、OpenID Connect言語で「話す」ことができます。
バージョン1.9.0では、すべてのエンドポイントを持つjsonはアドレス/ auth/realms/{realm}にあります
実際に.well-know
へのリンクは、レルム設定の最初のタブにあります-しかし、リンクはリンクのように見えませんが、テキストボックスの値として...悪いUIデザインです。 レルムの一般タブのスクリーンショット
キークロークバージョン:4.6.0
FQDN/auth/realms/{realm_name} /。well-known/openid-configuration
ここにすべてが表示されます。さらに、IDプロバイダーがKeycloakである場合、このURLを供給すると、他のIDプロバイダーがサポートし、すでに処理している場合、すべてがtrueに設定されます
次のリンクは、Keycloakに関するメタデータを説明するJSONドキュメントを提供します
/auth/realms/{realm-name}/.well-known/openid-configuration
master
レルムについてKeycloak 6.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"
}