ID 및 액세스 관리 솔루션을 제공하는 오픈소스.
client_id
redirect_uri
response_type
=code > 인증 코드 방식임을 나타냄scope
> 요청된 권한 범위 (예: openid, profile, email)redirect_uri
로 Authorization Code를 포함해 리디렉션+-------------------+ +----------------------+ +---------------------+
| User | | Client (App) | | Authorization Server |
+-------------------+ +----------------------+ +---------------------+
| | |
| 1. Access Resource Request | |
|----------------------------->| |
| | |
| | 2. Request Authorization Code |
| |----------------------------->|
| | |
| | 3. Login Prompt to User |
|<-------------------------------------------------------------|
| 4. User Logs in | |
|----------------------------->| |
| | 5. Return Authorization |
| |<-----------------------------|
| | Code |
| | |
| | 6. Exchange Auth Code for |
| | Access Token |
| |----------------------------->|
| | |
| | 7. Return Access Token |
| |<-----------------------------|
+-------------------+ +----------------------+ +---------------------+
| User | | Client (App) | | Authorization Server |
+-------------------+ +----------------------+ +---------------------+
| | |
| 1. Access Resource Request | |
|----------------------------->| |
| | 2. Request Access Token |
| |----------------------------->|
| | |
| | 3. Login Prompt to User |
|<-------------------------------------------------------------|
| 4. User Logs in | |
|----------------------------->| |
| | 5. Return Access Token |
| |<-----------------------------|
+-------------------+ +----------------------+ +---------------------+
| | | Client (App) | | Authorization Server |
| | +----------------------+ +---------------------+
| | | |
| | 1. Request Access Token | |
| |----------------------------->| |
| | | 2. Validate Client |
| | | Credentials |
| | |----------------------------->|
| | | 3. Return Access Token |
| | |<-----------------------------|
+-------------------+ +----------------------+ +---------------------+
| User | | Client (App) | | Authorization Server |
+-------------------+ +----------------------+ +---------------------+
| | |
| 1. Submit Credentials | |
|----------------------------->| |
| | 2. Forward Credentials |
| |----------------------------->|
| | |
| | 3. Validate User |
| | Credentials |
| |----------------------------->|
| | 4. Return Access Token |
| |<-----------------------------|
+-------------------+ +----------------------+ +---------------------+
| Device | | Client (App) | | Authorization Server |
+-------------------+ +----------------------+ +---------------------+
| | |
| 1. Request Authorization | |
|----------------------------->| |
| | 2. Return Device Code & User |
| | Code |
|<-----------------------------| |
| | |
| 3. User enters User Code on | |
| a different device | |
|----------------------------->| |
| | 4. User Authenticates |
| |----------------------------->|
| | 5. Return Access Token |
| |<-----------------------------|
| 6. Use Access Token to | |
| access resources | |
Access Type
⚠️ Keycloak v22~ 부터는 Access Type을 직접 설정하는 대신 조합으로 대신함
Client Authentication = OFF
Client Authentication = ON
+ Service Accounts Enabled = OFF
Client Authentication = ON
+ Standard Flow Enabled = OFF
+ Direct Access Grants Enabled = OFF
🔥 핵심 설정
ON
이면 confidential처럼 작동 (시크릿 필요)OFF
면 public처럼 작동Valid Redirect URIs
반드시 명확하게 지정해야 함. 와일드 카드(*
)는 최소화
Web Origins
CORS 에러 방지를 위해 클라이언트 도메인 명시해야 함
클라이언트 앱은 Keycloak의 .well-known
URL을 통해 자동 설정 가능
(ex) https://{host}/realms/{realm}/.well-known/openid-configuration
ID Token
/ Access Token
에 클레임 추가하려면 꼭 설정해야함