Keycloak의 OAuth2 / OpenID Connect 엔드 포인트는 무엇입니까?
우리는 Keycloak을 SSO 솔루션으로 평가하려고 노력하고 있으며 여러 측면에서 좋아 보이지만 문서에는 기본이 부족합니다.
http://localhost:8080/
영역 에 대해 지정된 Keycloak 설치의 test
경우 OAuth2 인증 엔드 포인트 , OAuth2 토큰 엔드 포인트 및 OpenID Connect UserInfo 엔드 포인트는 무엇입니까?
우리는 Keycloak의 자체 클라이언트 라이브러리를 사용하는 데 관심이 없습니다. keycloak 서버를 사용하는 클라이언트 애플리케이션은 광범위한 언어 (PHP, Ruby, Node, Java, C #)로 작성되므로 표준 OAuth2 / OpenID Connect 클라이언트 라이브러리를 사용하려고합니다. , 각도). 따라서 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 에서 정보를 찾았습니다.
참고 : 유효한 리디렉션 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.0 사양을 구현합니다 .
많은 파고 끝에 우리는 (주로 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_token
와 access_token
있다 서명 JWT를 , 및 토큰의 키, 즉 오픈 ID 연결의 키는 있습니다 :
"iss": "{realm}"
"sub": "5bf30443-0cf7-4d31-b204-efd11a432659"
"name": "Amir Abiri"
"email: "..."
따라서 Keycloak 1.1.x는 OpenID Connect를 완전히 준수하지는 않지만 OpenID Connect 언어로 "말"합니다.
실제로 링크 .well-know
는 영역 설정의 첫 번째 탭에 있지만 링크는 링크처럼 보이지 않지만 텍스트 상자의 값으로 ... 잘못된 UI 디자인입니다. Realm의 일반 탭 스크린 샷
버전 1.9.0에서 모든 엔드 포인트가있는 json은 / auth / realms / {realm} 주소에 있습니다.
- 승인 끝점 : / auth / realms / {realm} / account
- 토큰 엔드 포인트 : / auth / realms / {realm} / protocol / openid-connect
keycloak 버전 : 4.6.0
- TokenUrl : [도메인] / auth / realms / {REALM_NAME} / protocol / openid-connect / token
- AuthUrl : [도메인] / auth / realms / {REALM_NAME} / protocol / openid-connect / auth
FQDN / auth / realms / {realm_name} /. well-known / openid-configuration
여기에서 모든 것을 볼 수 있으며 ID 공급자도 Keycloak 인 경우이 URL을 입력하면 지원하고 이미 처리 한 경우 다른 ID 공급자와 함께 모든 것이 설정됩니다.
다음 링크 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"
}
참고 URL : https://stackoverflow.com/questions/28658735/what-are-keycloaks-oauth2-openid-connect-endpoints
'developer tip' 카테고리의 다른 글
Java 8에 Scala의 Either와 동등한 것이 있습니까? (0) | 2020.11.14 |
---|---|
Homebrew는 nvm을 설치하지만 나중에 nvm을 찾을 수 없습니까? (0) | 2020.11.14 |
Visual Studio에서 '웹 사이트'와 '프로젝트'의 차이점 (0) | 2020.11.14 |
Python에 익명의 클래스가 있습니까? (0) | 2020.11.14 |
JavaScript : 문자열 부울 값 구문 분석? (0) | 2020.11.14 |