OpenID Connect (OIDC)는 OAuth 2.0을 기반으로 한 인증(Authentication) 프로토콜입니다. OIDC는 사용자를 인증하고 그 결과를 애플리케이션(클라이언트)과 공유하기 위한 표준 프로토콜입니다. OAuth 2.0이 권한 부여(Authorization)를 처리하는 반면, OIDC는 인증(Authentication)에 초점을 맞춥니다.
1. OIDC란?
- OpenID Connect는 OAuth 2.0의 확장으로, 사용자 인증을 위한 ID 토큰을 제공합니다.
- 인증 후 사용자 정보를 애플리케이션에 전달하여 사용자를 식별하고 세션을 생성합니다.
- 주로 싱글 사인온(SSO) 시스템을 구현할 때 사용됩니다.
2. OIDC의 주요 구성 요소
ID Token:
- 사용자의 인증 정보를 포함하는 JWT(JSON Web Token) 형식의 토큰.
- 사용자 ID, 발급자 정보, 만료 시간 등의 정보를 포함합니다.
- 클라이언트는 이 토큰을 통해 사용자를 식별합니다.
UserInfo Endpoint:
- 인증된 사용자에 대한 추가 정보를 가져오기 위한 엔드포인트.
- 예: 이름, 이메일, 프로필 사진 등.
Authentication Flow:
- OIDC는 OAuth 2.0의 권한 부여 방식을 확장하여 인증을 처리합니다.
- 주요 플로우:
- Authorization Code Flow (서버-사이드 인증)
- Implicit Flow (클라이언트-사이드 인증, 사용 지양)
- Hybrid Flow (Authorization Code + Implicit 혼합 방식)
3. OIDC 동작 원리
1) 클라이언트가 인증 요청
- 클라이언트 애플리케이션이 인증을 요청합니다.
- URL 예시:
GET /authorize?response_type=code &client_id=client &redirect_uri=https://app.com/callback &scope=openid profile email &state=abc123 &nonce=xyz456
- URL 예시:
2) 사용자가 인증
- 사용자는 인증 서버(OpenID Provider, OP)에서 로그인합니다.
3) Authorization Code 발급
- 인증 서버는 Authorization Code를 클라이언트에게 반환합니다.
4) Access Token 및 ID Token 발급
- 클라이언트는 Authorization Code를 사용해 Token Endpoint에서 Access Token과 ID Token을 요청합니다.
- 요청:
POST /token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code code=xyz123 client_id=client client_secret=secret redirect_uri=https://app.com/callback
- 요청:
5) ID Token 검증 및 사용자 정보 활용
- 클라이언트는 받은 ID Token을 검증하여 사용자를 식별하고 세션을 생성합니다.
- 필요시 UserInfo Endpoint를 통해 추가 정보를 가져옵니다.
4. 주요 구성 요소
a. ID Token
- JWT 형식으로 발급되며, 인증된 사용자 정보를 포함합니다.
- 포함 정보 예시:
{ "iss": "https://example.com", // 발급자 (Issuer) "sub": "1234567890", // 사용자 ID (Subject) "aud": "client", // 클라이언트 ID (Audience) "exp": 1516239022, // 만료 시간 (Expiration) "iat": 1516239022, // 발급 시간 (Issued At) "email": "user@example.com", // 추가 사용자 정보 (클레임) }
b. UserInfo Endpoint
- 사용자의 추가 정보를 얻기 위한 REST API.
- Access Token을 통해 호출 가능.
- 요청:
GET /userinfo Authorization: Bearer <access_token>
- 응답:
{ "sub": "1234567890", "name": "John Doe", "email": "johndoe@example.com" }
- 요청:
5. OIDC의 주요 사용 사례
싱글 사인온(SSO):
- 한 번 로그인하면 여러 애플리케이션에 자동으로 로그인됩니다.
소셜 로그인:
- Google, Facebook, GitHub 등의 OpenID Connect 기반 로그인.
분산 인증 시스템:
- 마이크로서비스 환경에서 인증과 권한 부여를 중앙 집중화.
6. OIDC의 장점
OAuth 2.0과의 통합:
- OIDC는 OAuth 2.0 위에 구축되어 인증과 권한 부여를 통합적으로 처리합니다.
표준화된 인증:
- 클라이언트가 발급받는 ID Token과 UserInfo Endpoint는 표준화된 형식입니다.
확장성:
- 다양한 추가 정보를 클레임(Claims) 형태로 확장할 수 있습니다.
보안 강화:
nonce
,state
등을 통해 CSRF 및 Replay 공격 방지.
7. OpenID Connect와 OAuth 2.0의 차이
기능 | OAuth 2.0 | OpenID Connect |
---|---|---|
목적 | 권한 부여 (Authorization) | 인증 (Authentication) |
주요 토큰 | Access Token | ID Token (JWT 형식) |
사용자 정보 | 직접 포함하지 않음 | ID Token 및 UserInfo Endpoint |
사용 사례 | API 호출 권한 관리 | 사용자 인증, SSO, 로그인 |
8. OIDC와 Spring Security
Spring Security는 OIDC를 쉽게 통합할 수 있는 기본 설정을 제공합니다.
Spring Boot OIDC 설정 예시
spring:
security:
oauth2:
client:
registration:
google:
client-id: your-client-id
client-secret: your-client-secret
scope: openid, profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider:
google:
issuer-uri: https://accounts.google.com
Spring Security는 자동으로 OIDC 플로우를 처리하며, ID Token 및 Access Token을 쉽게 활용할 수 있도록 지원합니다.
결론
- OpenID Connect (OIDC)는 OAuth 2.0을 기반으로 사용자 인증(Authentication)을 처리하는 표준 프로토콜입니다.
- ID Token을 통해 인증 정보를 제공하며, 주로 싱글 사인온(SSO), 소셜 로그인 등에 사용됩니다.
- Spring Security와의 통합을 통해 쉽게 사용할 수 있으며, 현대적인 인증 시스템을 구축하는 데 널리 사용됩니다.
'Springboot > Springboot Security' 카테고리의 다른 글
OAuth2.0 (1) | 2024.12.19 |
---|---|
인트로스펙션(Introspection) (+ 불투명 토큰 ) (0) | 2024.12.18 |
JWT (JSON Web Token) (0) | 2024.11.01 |
CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유) (0) | 2024.11.01 |
CSRF(Cross-Site Request Forgery) (0) | 2024.10.31 |