[OpenSource/API] Keycloak OIDC(OpenID Connect) Endpoint API
해당 글에서는 OIDC Keyclaok Endpoint의 종류에 대해 알아보고 사용되는 예시를 확인해 봅니다.
💡 [참고] Keycloak 초기 구성에서부터 활용방법에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
분류 | 주제 | URL |
Docker | Docker Compose를 이용한 Keycloak 환경 구성 및 실행 방법 | https://adjh54.tistory.com/644 |
환경설정 | Google Cloud Console OAuth 2.0 API 액세스 환경 설정하기 | https://adjh54.tistory.com/657 |
API | Keycloak OIDC(OpenID Connect) Keycloak Endpoint API | https://adjh54.tistory.com/661 |
이해하기 | Keycloak 이해하기 -1 : 구성 요소, 인증 처리과정, 주요 기능 | https://adjh54.tistory.com/645 |
이해하기 | Keycloak 이해하기 -2 : SAML/OIDC 프로토콜, 인증 흐름(Authentication flow) 종류 | https://adjh54.tistory.com/646 |
이해하기 | Keycloak 이해하기 -3 : 기본 환경 구성 및 로그인/로그아웃 구현 | https://adjh54.tistory.com/647 |
이해하기 | Keycloak 이해하기 -4 : Keycloak 권한 및 종류 | https://adjh54.tistory.com/655 |
구성하기 | Spring Boot 환경에서 Keycloak 활용하기 -1 : OIDC 인증 흐름 구현(Standard Flow) | https://adjh54.tistory.com/648 |
구성하기 | Spring Boot 환경에서 Keycloak 활용하기 -2 : OIDC 인증 흐름 구현(Direct Access Grants, Implicit Flow) | https://adjh54.tistory.com/649 |
구성하기 | Spring Boot 환경에서 Keycloak 활용하기 -3 : OIDC 인증 흐름 구현(Service Accounts Roles) | https://adjh54.tistory.com/654 |
구성하기 | Spring Boot 환경에서 Keycloak 활용하기 -4 : Identity providers Social 소셜 로그인 구현(Google) | https://adjh54.tistory.com/658 |
구성하기 | Spring Boot 환경에서 Keycloak 활용하기 -5 : 일반 사용자와 소셜 로그인 매핑 | https://adjh54.tistory.com/659 |
Github | Spring Boot Keycloak 관련 Repository | https://github.com/adjh54ir/blog-codes/tree/main/spring-boot-keycloakhttps://github.com/adjh54ir/blog-codes/tree/main/spring-boot-keycloak-sub |
1) OICD(OpenID Connect) Keycloak Endpoint API Document
💡 OICD(OpenID Connect) Keycloak Endpoint API Document
- Keycloak에서 제공하는 OpenID Connect(OIDC) 프로토콜의 주요 엔드포인트들에 대한 상세 API 문서입니다. 이 문서는 인증(Authentication)과 인가(Authorization)를 위한 다양한 엔드포인트들의 사용법과 파라미터들을 설명합니다.
- 각 엔드포인트는 OAuth 2.0과 OpenID Connect 표준을 준수하며, RESTful API 형태로 제공됩니다.
Secure applications and services with OpenID Connect - Keycloak
Keycloak server can send errors to the client application in the OIDC authentication response with parameters error=temporarily_unavailable and error_description=authentication_expired. Keycloak sends this error when a user is authenticated and has an SSO
www.keycloak.org
1. OICD(OpenID Connect) Keycloak Endpoint 주요 기능
기능 | 설명 |
인증 코드 발급 | Authorization Code Grant를 통한 인증 코드 발급 |
토큰 발급 및 갱신 | 액세스 토큰과 리프레시 토큰의 발급 및 갱신 |
사용자 정보 조회 | 인증된 사용자의 프로필 정보 조회 |
토큰 검증 및 폐기 | 발급된 토큰의 유효성 검사 및 폐기 처리 |
클라이언트 등록 및 관리 | OAuth 클라이언트의 등록 및 설정 관리 |
2) Keycloak Endpoint API 요약
엔드포인트 분류 | URL | HTTP Method | 설명 |
토큰 발급 | /realms/{realm-name}/protocol/openid-connect/token | POST | 액세스 토큰, 리프레시 토큰을 발급받는 엔드포인트 |
인증 코드 발급 | /realms/{realm-name}/protocol/openid-connect/auth | GET | 인증 코드를 발급받기 위한 엔드포인트 |
로그아웃 | /realms/{realm-name}/protocol/openid-connect/logout | POST | 사용자 세션을 종료하고 로그아웃하는 엔드포인트 |
토큰 검증 | /realms/{realm-name}/protocol/openid-connect/token/introspect | POST | 토큰의 유효성을 검사하는 엔드포인트 |
사용자 정보 조회 | /realms/{realm-name}/protocol/openid-connect/userinfo | GET | 토큰으로 인증된 사용자의 정보를 조회하는 엔드포인트 |
인증서 조회 | /realms/{realm-name}/protocol/openid-connect/certs | GET | 토큰 검증에 사용되는 공개키 인증서를 조회하는 엔드포인트 |
클라이언트 등록 | /realms/{realm-name}/clients-registrations/openid-connect | POST | 새로운 클라이언트를 등록하는 엔드포인트 |
토큰 폐기 | /realms/{realm-name}/protocol/openid-connect/revoke | POST | 발급된 토큰을 무효화하는 엔드포인트 |
디바이스 인증 | /realms/{realm-name}/protocol/openid-connect/auth/device | POST | 디바이스 기반 인증을 처리하는 엔드포인트 |
CIBA 인증 | /realms/{realm-name}/protocol/openid-connect/ext/ciba/auth | POST | Client Initiated Backchannel Authentication 처리 엔드포인트 |
Secure applications and services with OpenID Connect - Keycloak
Keycloak server can send errors to the client application in the OIDC authentication response with parameters error=temporarily_unavailable and error_description=authentication_expired. Keycloak sends this error when a user is authenticated and has an SSO
www.keycloak.org
3) 인증 코드 발급(openid-connect/auth)
💡 인증 코드 발급(openid-connect/auth)
- 인증 코드 발급 방법은 response_type에 따라서 각각 처리가 다릅니다.
Response Type | 설명 | 특징 | 보안수준 |
code | 인증 코드를 반환 | Authorization Code Flow에서 사용되며, 토큰 교환이 필요 | 높음 |
token | 액세스 토큰을 직접 반환 | Implicit Flow에서 사용되며, 즉시 토큰 발급 | 낮음 |
id_token | ID 토큰만 반환 | 사용자 인증 정보만 필요한 경우 사용 | 중간 |
code id_token | 인증 코드와 ID 토큰을 함께 반환 | Hybrid Flow에서 사용 | 높음 |
token id_token | 액세스 토큰과 ID 토큰을 함께 반환 | Implicit Flow의 변형 | 낮음 |
code token | 인증 코드와 액세스 토큰을 함께 반환 | Hybrid Flow의 다른 형태 | 중간 |
1. 인증 엔드포인트 : response_type=code
💡 인증 엔드포인트 : response_type=code
- 이 엔드포인트는 OAuth 2.0/OpenID Connect의 Authorization Code Flow에서 사용되는 인증 엔드포인트입니다. 사용자를 인증하고 권한을 부여받기 위한 첫 단계로 사용됩니다.
- 인증 코드(Authentication Code)를 먼저 발급받은 후, 이를 통해 액세스 토큰을 얻는 2단계 인증과정에서 사용합니다.
// format
// [GET] /realms/{realm-name}/protocol/openid-connect/auth
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/auth?client_id=spring-boot-app&response_type=code&redirect_uri=http://localhost:8080/api/v1/keycloak/callback

1.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
client_id | 필수 | 클라이언트 식별자 |
response_type | 필수 | code로 설정 |
redirect_uri | 필수 | 인증 코드를 전달받을 리다이렉트 URL |
scope | 권장 | 요청하는 권한 범위 (openid, profile 등) |
state | 권장 | CSRF 방지를 위한 임의의 문자열 |
prompt | 선택 | 인증 프롬프트 동작 설정 (none, login, consent 등) |
nonce | 권장 | 재생 공격 방지를 위한 임의의 문자열 |
code_challenge | 선택 | PKCE를 위한 코드 챌린지 |
code_challenge_method | 선택 | 코드 챌린지 생성 방식 (S256 또는 plain) |
1.2. 응답 파라미터
파라미터 | 설명 |
code | 발급된 인증 코드 |
state | 요청 시 전달한 state 값과 동일한 값 |
session_state | 키클록 세션 상태 식별자 |
error | 오류 발생 시 오류 코드 |
error_description | 오류에 대한 상세 설명 |
2. 인증 엔드포인트 : response_type=token
💡 인증 엔드포인트 : response_type=token
- 엔드포인트는 OAuth 2.0/OpenID Connect의 Implicit Flow에서 사용되는 인증 엔드포인트입니다. 사용자 인증 후 액세스 토큰을 즉시 클라이언트에게 전달하는 단순화된 인증 방식을 제공합니다.
- response_type=token과 다르게, 단일 요청으로 액세스 토큰을 직접 받을 수 있으며 별도의 토큰 교환 단계가 필요로 하지 않습니다.
- 토큰이 URL 프래그먼트를 통해 전달되어 보안에 취약할 수 있습니다.
// format
// [GET] /realms/{realm-name}/protocol/openid-connect/auth
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/auth?client_id=spring-boot-app&response_type=token&redirect_uri=http://localhost:3000/login/callback

2.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
client_id | 필수 | 클라이언트 식별자 |
response_type | 필수 | token으로 설정 |
redirect_uri | 필수 | 토큰을 전달받을 리다이렉트 URL |
scope | 권장 | 요청하는 권한 범위 (openid, profile 등) |
state | 권장 | CSRF 방지를 위한 임의의 문자열 |
2.2. 응답 파라미터
파라미터 | 설명 |
access_token | 발급된 액세스 토큰 |
token_type | 토큰 타입 (일반적으로 "Bearer") |
expires_in | 토큰 만료 시간 (초 단위) |
scope | 부여된 권한 범위 |
state | 요청 시 전달한 state 값과 동일한 값 |
4) 토큰 발급(openid-connect/token)
💡 토큰 발급(openid-connect/token)
- 토큰 발급의 종류는 grant_type에 따라서 각기 다른 처리를 수행합니다.
Grant Type | 설명 | 사용 상황 | 보안 수준 |
authorization_code | 인증 코드를 통해 토큰을 발급받는 방식 | 일반적인 웹 애플리케이션 | 높음 |
password | 사용자의 아이디/비밀번호로 직접 토큰을 발급받는 방식 | 레거시 애플리케이션, 신뢰할 수 있는 자체 애플리케이션 | 낮음 |
client_credentials | 클라이언트 자격증명만으로 토큰을 발급받는 방식 | 서버 간 통신, 백그라운드 작업 | 중간 |
refresh_token | 리프레시 토큰을 사용하여 새로운 액세스 토큰을 발급받는 방식 | 액세스 토큰 갱신이 필요한 경우 | 중간 |
implicit | 단일 요청으로 토큰을 즉시 발급받는 방식 | SPA(Single Page Application), 모바일 앱 | 매우 낮음 |
1. 토큰 발급 : grant_type=password
💡 토큰 발급 : grant_type=password
- 사용자의 username과 password를 직접 사용하여 토큰을 발급받는 방식입니다. 이 방식은 보안상 위험하므로 특별한 경우에만 사용해야 합니다.
- Password Grant Type은 레거시 애플리케이션을 위한 것으로, 새로운 애플리케이션에서는 권장되지 않습니다.
// format
// [POST] /realms/{realm-name}/protocol/openid-connect/token
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/token
// curl example
curl -X POST "http://localhost:9001/realms/dev-realm/protocol/openid-connect/token" \\
-H "Content-Type: application/x-www-form-urlencoded" \\
-d "grant_type=password" \\
-d "client_id=spring-boot-app" \\
-d "client_secret=oDq9fBBGRbpkCsZP3dhsS84TBfyjJk1h" \\
-d "username=adjh54" \\
-d "password=test1234"

1.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
grant_type | 필수 | password로 설정 |
username | 필수 | 사용자 아이디 |
password | 필수 | 사용자 비밀번호 |
client_id | 필수 | 클라이언트 식별자 |
client_secret | 조건부 | 클라이언트 비밀키 (confidential 클라이언트의 경우) |
scope | 선택 | 요청하는 권한 범위 (openid, profile 등) |
code | 선택 | 인증 엔드포인트에서 받은 인증 코드 |
redirect_uri | 선택 | 인증 코드를 받을 때 사용한 리다이렉트 URI와 동일해야 함 |
code_verifier | 선택 | PKCE 사용 시 필수 (code_challenge에 대응되는 값) |
2.2. 응답 파라미터
파라미터 | 설명 |
access_token | 발급된 액세스 토큰 |
token_type | 토큰 타입 (Bearer) |
expires_in | 액세스 토큰 만료 시간 (초) |
refresh_token | 리프레시 토큰 |
scope | 발급된 토큰의 권한 범위 |
2. 토큰 발급 : grant_type=authorization_code
💡 토큰 발급 : grant_type=authorization_code
- OAuth 2.0의 가장 일반적이고 안전한 인증 방식입니다. 즉, 사용자가 인증을 완료한 후 받은 인증 코드(authorization code)를 액세스 토큰으로 교환하는 방식입니다.
- 클라이언트는 인증 코드를 안전하게 토큰으로 교환할 수 있으며, 리프레시 토큰도 함께 받을 수 있습니다.
// format
// [POST] /realms/{realm-name}/protocol/openid-connect/token
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/token
// curl example
curl -X POST "http://localhost:9001/realms/dev-realm/protocol/openid-connect/token" \\
-H "Content-Type: application/x-www-form-urlencoded" \\
-d "grant_type=authorization_code" \\
-d "client_id=spring-boot-app" \\
-d "client_secret=WnmQEGAOzEJ7Kyr2UCJha5AXKCjwnGpB" \\
-d "code=c6266a3a-1875-4125-86bf-0d438dcf3241.141a70b8-9fd9-4544-9496-383a0b74b39a.3c756e38-7bf1-47ac-bf36-06d97345b59c" \\
-d "redirect_uri=http://localhost:8080/api/v1/keycloak/callback"

2.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
grant_type | 필수 | authorization_code로 설정 |
code | 필수 | 인증 엔드포인트에서 받은 인증 코드 |
client_id | 필수 | 클라이언트 식별자 |
client_secret | 조건부 | 클라이언트 비밀키 (confidential 클라이언트의 경우 필수) |
redirect_uri | 필수 | 인증 코드를 받을 때 사용한 리다이렉트 URI와 동일해야 함 |
code_verifier | 조건부 | PKCE 사용 시 필수 (code_challenge에 대응되는 값) |
username | 선택 | 사용자 아이디 |
password | 선택 | 사용자 비밀번호 |
scope | 선택 | 요청하는 권한 범위 (openid, profile 등) |
2.2. 응답 파라미터
파라미터 | 설명 |
access_token | 발급된 액세스 토큰 |
token_type | 토큰 타입 (일반적으로 "Bearer") |
expires_in | 액세스 토큰 만료 시간 (초 단위) |
refresh_token | 리프레시 토큰 (scope에 offline_access가 포함된 경우) |
id_token | OpenID Connect 사용 시 발급되는 ID 토큰 |
expires_in | 액세스 토큰 만료 시간 (초) |
scope | 발급된 토큰의 권한 범위 |
3. 토큰 발급 : grant_type=client_credentials
💡 토큰 발급 : grant_type=client_credentials
- 클라이언트가 자신의 자격증명을 사용하여 직접 액세스 토큰을 얻는 방식입니다.
- 이 방식은 사용자 컨텍스트가 필요 없는 서버 간 통신이나 백그라운드 작업에 적합합니다.
- 클라이언트 인증 정보만으로 토큰을 발급받기 때문에, 높은 보안이 요구되는 confidential 클라이언트에서만 사용해야 합니다.
// format
// [POST] /realms/{realm-name}/protocol/openid-connect/token
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/token
// curl example
curl -X POST "http://localhost:9001/realms/dev-realm/protocol/openid-connect/token" \\
-H "Content-Type: application/x-www-form-urlencoded" \\
-d "grant_type=client_credentials" \\
-d "client_id=spring-boot-app" \\
-d "client_secret=WnmQEGAOzEJ7Kyr2UCJha5AXKCjwnGpB"

3.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
grant_type | 필수 | client_credentials로 설정 |
client_id | 필수 | 클라이언트 식별자 |
client_secret | 필수 | 클라이언트 비밀키 |
scope | 선택 | 요청하는 권한 범위 |
code | 선택 | 인증 엔드포인트에서 받은 인증 코드 |
redirect_uri | 선택 | 인증 코드를 받을 때 사용한 리다이렉트 URI와 동일해야 함 |
code_verifier | 선택 | PKCE 사용 시 필수 (code_challenge에 대응되는 값) |
username | 선택 | 사용자 아이디 |
password | 선택 | 사용자 비밀번호 |
scope | 선택 | 요청하는 권한 범위 (openid, profile 등) |
3.2. 응답 파라미터
파라미터 | 설명 |
access_token | 발급된 액세스 토큰 |
token_type | 토큰 타입 (Bearer) |
expires_in | 액세스 토큰 만료 시간 (초) |
scope | 발급된 토큰의 권한 범위 |
5) 로그아웃(openid-connect/logout)
💡 로그아웃(openid-connect/logout)
- 사용자의 세션을 종료하고 인증 상태를 해제하는 데 사용됩니다. 이 엔드포인트를 호출하면 Keycloak은 사용자의 세션을 무효화하고, 발급된 토큰들을 취소합니다.
1. 로그아웃 엔드포인트
💡 로그아웃 엔드포인트
- 로그아웃 후에는 기존에 발급된 모든 토큰이 무효화됩니다.
- Single Sign-Out이 구성된 경우, 연결된 모든 애플리케이션에서도 로그아웃이 수행됩니다.
- 프론트엔드 애플리케이션의 경우, 로그아웃 후 로컬 저장소의 토큰도 삭제해야 합니다.
// format
// [GET] /realms/{realm-name}/protocol/openid-connect/logout
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/logout?redirect_uri=http://localhost:8080/api/v1/keycloak/logout&client_id=spring-boot-app

1.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
redirect_uri | 필수 | 로그아웃 후 리다이렉트될 URL |
client_id | 필수 | 클라이언트 식별자 |
client_secret | 조건부 | 클라이언트 비밀키 (confidential 클라이언트의 경우 필수) |
6) 토큰 검증(openid-connect/token/introspect)
💡 토큰 검증(openid-connect/token/introspect)
- 토큰의 유효성을 검사하고 토큰에 대한 메타데이터를 조회하는 엔드포인트입니다.
- 토큰이 유효한지, 만료되었는지, 어떤 권한을 가지고 있는지 등의 정보를 확인할 수 있습니다.
- 리소스 서버에서 클라이언트가 제시한 토큰의 유효성을 검증할 때 사용됩니다.

// format
// [POST] /realms/{realm-name}/protocol/openid-connect/token/introspect
// example
// <http://localhost:9001/realms/dev-realm/protocol/openid-connect/token/introspect>
// curl example
curl -X POST \\
'http://localhost:9001/realms/dev-realm/protocol/openid-connect/token/introspect' \\
-H 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'token=sdjkhfsdkjfhg' \\
--data-urlencode 'client_id=spring-boot-app' \\
--data-urlencode 'client_secret=WnmQEGAOzEJ7Kyr2UCJha5AXKCjwnGpB'
1.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
token | 필수 | 검증할 토큰 (액세스 토큰 또는 리프레시 토큰) |
client_id | 필수 | 클라이언트 식별자 |
client_secret | 조건부 | 클라이언트 비밀키 (confidential 클라이언트의 경우 필수) |
token_type_hint | 선택 | 토큰 타입 힌트 (access_token 또는 refresh_token) |
1.2. 응답 파라미터
필드 | 설명 |
active | 토큰의 유효성 여부 (true/false) |
exp | 토큰 만료 시간 (Unix timestamp) |
iat | 토큰 발급 시간 (Unix timestamp) |
aud | 토큰의 대상 청중 |
sub | 토큰 주체 (사용자 ID) |
scope | 토큰의 권한 범위 |
username | 사용자 이름 |
사용자 이메일 | |
name | 사용자 전체 이름 |
7) 사용자 조회(opendi-connect/userinfo)
💡 사용자 조회(opendi-connect/userinfo)
- 현재 인증된 사용자의 프로필 정보를 조회하는 엔드포인트입니다.
- 액세스 토큰을 사용하여 사용자의 기본 정보 및 추가 클레임을 조회할 수 있습니다.
- OAuth2.0/OpenID Connect 프로토콜의 표준 엔드포인트입니다.

1. 사용자 정보 조회 엔드포인트
// format
// [GET] /realms/{realm-name}/protocol/openid-connect/userinfo
// example
// localhost:9001/realms/dev-realm/protocol/openid-connect/userinfo
// curl example
curl -X GET \\
'<http://localhost:9001/realms/dev-realm/protocol/openid-connect/userinfo>' \\
-H 'Authorization: Bearer {access_token}'
1.1. 요청 헤더
헤더 | 필수 여부 | 설명 |
Authorization | 필수 | Bearer {access_token} 형식의 액세스 토큰 |
1.2. 응답 파라미터
필드 | 설명 |
sub | 사용자의 고유 식별자 |
name | 사용자의 전체 이름 |
given_name | 사용자의 이름 |
family_name | 사용자의 성 |
preferred_username | 선호하는 사용자 이름 |
사용자의 이메일 주소 | |
email_verified | 이메일 인증 여부 |
{
"sub": "58021863-8437-44de-9d8d-272d6b001335",
"name": "lee jonghoon",
"given_name": "lee",
"family_name": "jonghoon",
"preferred_username": "adjh54",
"email": "adjh54@naver.com",
"email_verified": false
}
8) 인증서 조회(openid-connect/certs)
💡 인증서 조회(openid-connect/certs)
- 토큰 검증에 사용되는 공개키 인증서를 조회하는 엔드포인트입니다.
- JWT 토큰의 서명을 검증하는 데 사용됩니다.
- 클라이언트는 이 인증서를 사용하여 토큰의 무결성을 확인할 수 있습니다.
// format
// [GET] /realms/{realm-name}/protocol/openid-connect/certs
// example
// <http://localhost:9001/realms/dev-realm/protocol/openid-connect/certs>
// curl example
curl -X GET '<http://localhost:9001/realms/dev-realm/protocol/openid-connect/certs>'

1.1. 응답 파라미터
필드 | 설명 |
keys | JWKS(JSON Web Key Set) 형식의 공개키 목록 |
kid | 키 식별자 |
kty | 키 타입 (예: RSA) |
alg | 서명 알고리즘 |
use | 키 사용 목적 (sig: 서명) |
n | RSA 공개키의 모듈러스 |
e | RSA 공개키의 지수 |
9) 클라이언트 등록(clients-registrations/openid-connect)
💡 클라이언트 등록(clients-registrations/openid-connect)
- 새로운 OAuth2.0/OpenID Connect 클라이언트를 등록하는 엔드포인트입니다.
- 동적 클라이언트 등록 프로토콜을 구현합니다.
- 클라이언트 정보와 설정을 등록할 수 있습니다.
// format
// [POST] /realms/{realm-name}/clients-registrations/openid-connect
// example
// http://localhost:9001/realms/dev-realm/clients-registrations/openid-connect
// curl example
curl -X POST \\
'http://localhost:9001/realms/dev-realm/clients-registrations/openid-connect' \\
-H 'Content-Type: application/json' \\
-d '{
"client_name": "My Client",
"redirect_uris": ["<http://localhost:8080/callback>"],
"grant_types": ["authorization_code"]
}'
1.1. 요청 파라미터
파라미터 | 필수여부 | 설명 |
client_name | 필수 | 클라이언트의 이름 |
client_uri | 선택 | 클라이언트 웹사이트 URI |
redirect_uris | 필수 | 인증 후 리다이렉트될 URI 목록 |
grant_types | 선택 | 사용할 권한 부여 유형 (예: authorization_code, refresh_token) |
response_types | 선택 | 지원하는 응답 유형 (예: code) |
client_secret | 선택 | 클라이언트 비밀키 |
scope | 선택 | 요청할 권한 범위 |
token_endpoint_auth_method | 선택 | 토큰 엔드포인트 인증 방식 |
application_type | 선택 | 애플리케이션 유형 (web, native) |
contacts | 선택 | 관리자 연락처 이메일 |
logo_uri | 선택 | 클라이언트 로고 이미지 URI |
policy_uri | 선택 | 개인정보 처리방침 URI |
tos_uri | 선택 | 서비스 이용약관 URI |
jwks_uri | 선택 | JSON Web Key Set URI |
subject_type | 선택 | subject 식별자 유형 |
1.2. 응답 파라미터
필드 | 설명 |
client_id | 생성된 클라이언트의 고유 식별자 |
client_secret | 클라이언트 인증을 위한 비밀키 |
registration_access_token | 클라이언트 설정 관리를 위한 토큰 |
registration_client_uri | 클라이언트 설정 관리 엔드포인트 URI |
client_id_issued_at | 클라이언트 생성 시간 |
client_secret_expires_at | 클라이언트 시크릿 만료 시간 (0은 만료되지 않음) |
10) 토큰 폐기(openid-connect/revoke)
💡 토큰 폐기(openid-connect/revoke)
- 발급된 토큰을 무효화하는 엔드포인트입니다.
- 더 이상 사용하지 않을 토큰을 명시적으로 폐기할 수 있습니다.
- 보안상의 이유로 토큰을 즉시 무효화해야 할 때 사용됩니다.
// format
// [POST] /realms/{realm-name}/protocol/openid-connect/revoke
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/revoke
// example curl
curl -X POST \\
'http://localhost:9001/realms/dev-realm/protocol/openid-connect/revoke' \\
-H 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'token=your_token_here' \\
--data-urlencode 'client_id=your_client_id' \\
--data-urlencode 'client_secret=your_client_secret'

1.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
token | 필수 | 폐기할 토큰 (액세스 토큰 또는 리프레시 토큰) |
client_id | 필수 | 클라이언트 ID |
client_secret | 필수 | 클라이언트 시크릿 |
1.2. 응답 상태
상태 | 설명 |
200 OK | 토큰이 성공적으로 폐기됨 |
400 Bad Request | 잘못된 요청 (유효하지 않은 토큰 또는 클라이언트 인증 실패) |
401 Unauthorized | 클라이언트 인증 실패 |
11) 디바이스 인증(openid-connect/auth/device)
💡 디바이스 인증(openid-connect/auth/device)
- 입력이 제한된 디바이스에서 사용하는 인증 플로우를 처리하는 엔드포인트입니다.
- 스마트 TV나 IoT 디바이스와 같이 키보드 입력이 어려운 환경에서 사용됩니다.
- 사용자는 다른 디바이스에서 인증 코드를 입력하여 인증을 완료할 수 있습니다.
// format
// [POST] /realms/{realm-name}/protocol/openid-connect/auth/device
// example
// http://localhost:9001/realms/dev-realm/protocol/openid-connect/auth/device
// example curl
curl -X POST \\
'http://localhost:9001/realms/dev-realm/protocol/openid-connect/auth/device' \\
-H 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'client_id=your_client_id'
1.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
client_id | 필수 | 클라이언트 식별자 |
scope | 선택 | 요청하는 권한 범위 (예: openid profile email) |
resource | 선택 | 접근하고자 하는 리소스의 URI |
binding_message | 선택 | 사용자에게 표시될 바인딩 메시지 |
user_code | 선택 | 사용자가 입력할 인증 코드 |
1.2. 응답 파라미터
파라미터 | 설명 |
device_code | 디바이스 인증을 위한 고유 코드 |
user_code | 사용자가 입력해야 하는 검증 코드 |
verification_uri | 사용자가 방문해야 하는 검증 페이지 URL |
verification_uri_complete | user_code가 포함된 완전한 검증 URL |
expires_in | device_code의 유효 기간 (초) |
interval | 폴링 간격 (초) |
12) CIBA 인증(openid-connect/ext/ciba/auth)
💡 CIBA 인증(openid-connect/ext/ciba/auth)
- Client Initiated Backchannel Authentication을 처리하는 엔드포인트입니다.
- 디바이스 간 인증을 위한 백 채널 통신을 지원합니다.
- 사용자 상호작용 없이 인증을 완료할 수 있는 방법을 제공합니다.
// format
// [POST] /realms/{realm-name}/protocol/openid-connect/ext/ciba/auth
// example
// <http://localhost:9001/realms/dev-realm/protocol/openid-connect/ext/ciba/auth>
// example curl
curl -X POST \\
'<http://localhost:9001/realms/dev-realm/protocol/openid-connect/ext/ciba/auth>' \\
-H 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'client_id=your_client_id' \\
--data-urlencode 'login_hint=user@example.com'
1.1. 요청 파라미터
파라미터 | 필수 여부 | 설명 |
client_id | 필수 | 클라이언트를 식별하기 위한 고유 식별자 |
client_secret | 필수 | 클라이언트 인증을 위한 비밀키 |
login_hint | 필수 | 인증할 사용자를 식별하기 위한 정보 (이메일 또는 사용자명) |
scope | 필수 | 클라이언트가 요청하는 권한 범위 (예: openid profile email) |
binding_message | 선택 | 인증 과정에서 사용자에게 표시될 메시지 |
client_notification_token | 선택 | 인증 결과를 클라이언트에게 전달하기 위한 알림 토큰 |
1.2. 응답 파라미터
파라미터 | 설명 |
auth_req_id | 인증 요청 식별자 |
expires_in | 인증 요청의 유효 기간 (초) |
interval | 토큰 폴링 간격 (초) |
{
"auth_req_id": "1234567890",
"expires_in": 3600,
"interval": 5
}

오늘도 감사합니다 😀