Keycloak의 OAuth2 / OpenID Connect 엔드 포인트는 무엇입니까?


101

우리는 Keycloak을 SSO 솔루션으로 평가하려고 노력하고 있으며 여러 측면에서 좋아 보이지만 문서에는 기본이 부족합니다.

http://localhost:8080/영역 에 대해 지정된 Keycloak 설치의 test경우 OAuth2 인증 엔드 포인트 , OAuth2 토큰 엔드 포인트OpenID Connect UserInfo 엔드 포인트는 무엇입니까?

우리는 Keycloak의 자체 클라이언트 라이브러리를 사용하는 데 관심이 없습니다. keycloak 서버를 사용하는 클라이언트 애플리케이션은 광범위한 언어 (PHP, Ruby, Node, Java, C #)로 작성되므로 표준 OAuth2 / OpenID Connect 클라이언트 라이브러리를 사용하려고합니다. , 각도). 따라서 Keycloak 클라이언트를 사용하는 예제는 우리에게 유용하지 않습니다.


1
대신 무엇을 사용하게 되었습니까?
Ced

1
마침내 우리는 OAuth가 애플리케이션 자체에서 사용하는 기술로서 로그인 및 보안과 관련이 없으며 타사와의 통합에만 관련이 있다는 것을 위층에서 확신 할 수있었습니다. 구글과 FB가 어디에서나 사용하는 것이 우리와 관련이 없다는 사실을 설명하기 어려웠습니다.
Amir Abiri

6
@AmirAbiri는 타사 통합에만 사용된다고 말하지 않습니다. 이것이 오늘날 주요 용도이지만, 점점 더 많은 인터넷 회사가 지원하는 프로토콜이기 때문에 기업 환경에서 여러 애플리케이션 (또는 마이크로 서비스)을 처리하고 SSO 솔루션을 원하는 경우에도 의미가있을 수 있습니다. 사실 제 경우에는 keycloak을 10 개월 넘게 사용했는데 모든 사용자 관리 작업을 처리하기 때문에 간단한 응용 프로그램에도 적합 할 것이라고 생각합니다.
Xtreme Biker

답변:


136

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 에서 정보를 찾았습니다.

참고 : 유효한 리디렉션 URI 목록에 클라이언트를 추가해야 할 수 있습니다.


1
그 이후로 우리는 Keycloak을 사용하여 폐기되었으므로 확인할 수 없습니다.
Amir Abiri

웹 앱에서 로그인 링크를 가지려면 어떤 URL을 사용해야합니까? U는 그 모든 것을 시도했지만 그렇게하지 않았습니다
Ced

2
@AmirAbiri KeyCloak의 대안은 무엇입니까? 현재 평가 중입니다. UI와 같고 모든 사용자가 관리하도록하고 싶지만 GoLang 애플리케이션을 여기에 연결하는 데 어려움이 있습니다.
Tarion

@Tarion WSO2 ID 서버가 있습니다.
말할 수 없습니다

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 Connect는 기본적으로 OAuth 2가 하나 인 표준 집합입니다 (JWT는 다른 것)
Stijn de Witt 2017

2
이 의견은 다소 오해의 소지가 있습니다. OAuth2는 인증을위한 프로토콜을 구현하는 표준입니다. OIDC는 식별을 위해 OAuth2 위에서 작동하는 표준입니다.
Thomas Lann


15

많은 파고 끝에 우리는 정보를 다소 긁어 낼 수있었습니다 (주로 Keycloak의 자체 JS 클라이언트 라이브러리에서) :

  • 승인 끝점 : /auth/realms/{realm}/tokens/login
  • 토큰 끝점 : /auth/realms/{realm}/tokens/access/codes

에 관해서는 오픈 ID 연결 사용자 정보 가 완전히 오픈 ID 연결을 준수하지 않는, 그래서 지금 (1.1.0.Final) Keycloak이 엔드 포인트를 구현하지 않습니다. 그러나이 글을 쓰는 시점에서 1.2.x에 포함되어야한다고 추가 하는 패치 가 이미 있습니다.

하지만 아이러니하게도 Keycloak은 id_token액세스 토큰과 함께 다시 전송 합니다. 모두 id_tokenaccess_token있다 서명 JWT를 , 및 토큰의 키, 즉 오픈 ID 연결의 키는 있습니다 :

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

따라서 Keycloak 1.1.x는 OpenID Connect와 완전히 호환되지는 않지만 OpenID Connect 언어로 "말"합니다.


7

버전 1.9.0에서 모든 엔드 포인트가있는 json은 / auth / realms / {realm} 주소에 있습니다.

  • 승인 끝점 : / auth / realms / {realm} / account
  • 토큰 엔드 포인트 : / auth / realms / {realm} / protocol / openid-connect

6

관리 콘솔-> 영역 설정-> 끝점 필드에서 하이퍼 링크를 클릭하여이 정보를 볼 수도 있습니다.

여기에 이미지 설명 입력


1
이러한 엔드 포인트에 대한 문서가 어디에 있는지 알고 있습니까?
raarts

당신은 문서가 사용자 친화적 일 수 있다고 생각합니다
Rohit Kumar

3

keycloak 버전 : 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 Lew

2

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

여기에서 모든 것을 볼 수 있으며 ID 공급자도 Keycloak 인 경우이 URL을 입력하면 지원하고 이미 처리 한 경우 다른 ID 공급자와 함께 모든 것이 설정됩니다.


2

다음 링크 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"
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.