본문 바로가기

Spring Boot

OAuth : OpenID Connect(OIDC)

오뜨 오픈 아이디 커넥트

 

 - 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 기반 동작

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 기반 동작

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