오뜨 오픈 아이디 커넥트
- OAuth2와 OpenID Connect(OIDC)의 차이
- OAuth2는 "인가(Authorization)" 프로토콜이다
- OIDC는 OAuth2를 확장하여 "인증(Authentication)"을 포함한다
- 실제 소셜 로그인 시 어떤 데이터가 오고 가는가??
- 두 프로토콜의 워크플로우 차이
OAuth2와 OIDC의 관계
1. OAuth2의 목적
- OAuth2는 인가(Authorization)에 초첨을 둠
- 특정 클라이언트 애플리케이션이 사용자를 대신해서 리소스 서버의 데이터(API)에 접근할 수 있는 권한을 부여받는 프로토콜
- 사용자가 캘린더 앱을 통해 구글 캘린더 API에 접근하도록 허용하는 등등..
2. OIDC(OpenID Connect)의 목적
- OIDC는 OAuth2를 확장한 인증(Authentication) 프로토콜임
- OIDC는 OAuth2의 Access Token 발급 과정에 더해서 ID Token(JWT 기반)을 추가로 발급하여 사용자의 인증 정보 제공
- OIDC를 사용하면 클라이언트 애플리케이션은 사용자가 누구인지 식별할 수 있음(이름, 이메일, 프로필 사진 등등..)
- OIDC는 소셜 로그인(Google, Facebook, Github 로그인)의 기반이 됨
| OAuth2 | OIDC(Open ID Connect) | |
| 초점 | 인가(Authorization) | 인증(Authentication) + 인가 |
| 주요 토큰 | Access Token | Access Token + ID Token |
| 목적 | 제3자 API 자원 접근 권한 위임 | 사용자 인증 + 자원 접근 |
| 사용 예시 | 캘린더 API 읽기 권한 위임 | 구글 계정으로 로그인, 사용자 정보 조회 |
ID토큰의 개념, 활용
1. ID토큰?
- OIDC가 OAuth2를 확장하면서 추가된 핵심 요소
- JWT(Json Web Token) 형식으로 발급되며, 사용자 인증 결과와 기본 프로필 정보를 포함함
- 예 : sub(사용자 고유 ID), name, email, picture 등등..
{
"iss": "<https://accounts.google.com>", # 발급자
"sub": "<1234567890>", # 사용자의 고유 식별자
"aud": "my-cliend-id", # 토큰을 받을 client id
"exp": 124343565, # 만료 기간
"iat": 546567564, # 발급 시간
"email": "user@example.com", # 사용자의 이메일
"name": "이쁜이" # 사용자 이름
}
2. Access Token과의 비교
| Access Token | ID Token | |
| 목적 | 보호된 API 리소스 접근 | 사용자 인증 결과 증명 |
| 수신자 | Resource Server | Client 애플리케이션 |
| 형식 | Opaque 또는 JWT | JWT |
| 포함 정보 | 권한 범위(scope) | 사용자 식별 정보 |
3. 실무 활용
- Access Token은 API를 호출할 때 헤더에 담아서 사용함
- ID Token은 로그인 완료 후 애플리케이션이 사용자의 정보를 확인할 때 사용함
- 구글 로그인 후, ID Token을 디코딩하면 사용자의 이메일과 이름을 바로 알 수 있음
소셜 로그인 구현과 OIDC
1. OAuth2 기반 동작
Resource Owner가 Clinet에게 캘린더 기능 사용 요청
- > Client가 Authorization Server에 Authorization Code 요청
- > Resource Owner가 Authorization Server에 로그인하고, 동의함
- > Authorization Server가 Client에게 Authorization Code 전달
- > Client가 Authorization Server에게 Access Token 요청
- > Authorization Server가 Client에게 Access Token 전달(인가 후)
- > Client가 Resource Server에게 캘린더 API 호출
- > Access Token의 정보를 확인하고 Resource Server가 Client에게 캘린더 데이터를 반환함
* OAuth2는 사용자 데이터 접근 위임에 집중한다. 로그인 여부나 사용자 신원 자체는 보장하지 않음
2. OIDC 기반 동작
Resource Owner가 Client에 로그인 요청
- > Client가 Authorization Server(OIDC)에 Authorization Code 요청(OpenID scope 포함)
- > 사용자가 Authorization Server에서 로그인 + 동의
- > Authorization Server가 Client에게 Authorization Code를 반환해줌
- > 이에 대해 Client가 Access Token + ID Token 요청
- > Authorization Server가 Client에게 Access Token + ID Token 전달
- > Client가 Resource Server에게 Access Token으로 API 호출
- > Resource Server가 Client에게 자원 데이터를 반환해줌
* OIDC는 Access Token 외에도 ID Token을 함께 발급하여 클라이언트가 사용자 인증 정보를 확인할 수 있도록 함
소셜 로그인 시나리오
- OAuth2만 사용 : Google API를 대신 호출할 수 있지만, 사용자가 누구인지는 알 수 없음
- OIDC 사용 : 앱은 Google API 접근 권한을 얻는 동시에, 사용자의 이름 / 이메일 / 프로필을 안전하게 전달받음
- OAuth2만 사용할 땐 사용자의 Google Drive 파일을 읽어올 권한을 위임하지만,
OIDC를 사용하면 Google 계정으로 로그인 버튼을 누르면 이메일, 이름을 가져와서 회원가입 / 로그인 처리 + Google Drive를 접근할 수 있다.
팁
- OAuth2만 사용할 경우, 사용자가 누구인지 확인할 수 없음. 단지 "이 사용자가 리소스 접근을 허용했다"라는 사실만 알 수 있음
- OIDC를 사용해야 사용자의 신원, 기본 프로필을 안전하게 가져올 수 있음
- 소셜 로그인은 모두 OIDC를 기반으로 동작함
- 따라서 외부 API 호출만 필요하다면 OAuth2를, 로그인 기능까지 필요하다면 OIDC를 사용해야함
'Spring Boot' 카테고리의 다른 글
| [IntelliJ] .env를 통해 application.yml에 환경변수 적용법 (0) | 2026.03.15 |
|---|---|
| Spring Boot 3.xx와 비교한 4.xx의 특징 (0) | 2026.03.08 |
| OAuth : 워크플로우 (0) | 2025.10.15 |
| OAuth : 주체와 설정 (0) | 2025.10.15 |
| OAuth : OAuth? (0) | 2025.10.13 |