본문 바로가기
웹개발/통신 · 프로토콜

[OIDC] OAuth 2.0을 확장한 인증 프로토콜

by place-g 2024. 12. 3.
반응형

목차

 

  • OIDC란?
  • OAuth 2.0과 OIDC의 차이
  • OIDC의 동작 방식 (Authorization Code Flow)

 

 

OIDC란?

OIDC(OpenID Connect)는 OAuth 2.0을 확장해서 **사용자 인증(Authentication)**을 처리하는 프로토콜이다.
쉽게 말하면, "이 사람이 누구인지 확인해주는 표준"이라고 보면 된다.

OIDC의 가장 큰 특징은 ID Token이라는 걸 통해 사용자 정보를 안전하게 공유할 수 있다는 것이다.
이 토큰은 사용자가 인증을 성공했음을 증명하는 데이터이다.

 

 

 

OAuth 2.0과 OIDC의 차이

1. 목적

  • OAuth 2.0
    권한 부여(Authorization)를 위한 프로토콜이다.
    사용자가 자신의 자원(예: 구글 드라이브 파일, 사진 등)에 다른 애플리케이션이 접근할 수 있도록 권한을 위임하는 역할을 한다.
    👉 "이 앱이 내 데이터를 접근해도 돼!"
  • OIDC (OpenID Connect)
    사용자 인증(Authentication)을 위한 프로토콜이다.
    사용자 인증 정보를 공유하거나 로그인 기능을 구현할 때 사용된다.
    👉 "이 사람이 진짜 이 사용자야!"

 

2. 핵심 기능

  • OAuth 2.0
    액세스 토큰(Access Token)을 통해 권한 부여만 처리한다.
    사용자 정보(Identity)에 대한 보장은 없다.
  • OIDC
    인증(Authentication)을 추가한 프로토콜이다.
    ID 토큰(ID Token)을 통해 사용자 정보(Identity)를 확인할 수 있다.

 

3. 주요 토큰

  • OAuth 2.0
    • Access Token: API에 접근할 권한을 인증 서버에서 발급받는다.
      사용자 인증 정보는 포함되지 않는다.
    • Refresh Token: Access Token이 만료되면 재발급받기 위해 사용한다.
  • OIDC
    • ID Token: 사용자가 인증되었음을 증명하며, 사용자 정보(예: 이름, 이메일)를 담고 있다.
    • Access Token과 함께 사용할 수도 있다.

 

4. 사용 사례

  • OAuth 2.0
    • 구글 드라이브에서 문서 접근 권한 부여
    • 페이스북 API를 이용한 데이터 읽기
      👉 "이 앱이 데이터를 사용할 수 있도록 허용"
  • OIDC
    • 구글, 페이스북 로그인 기능
    • 사용자 인증 후 사용자 정보 반환
      👉 "이 사람이 진짜 맞아!"

 

 

OIDC의 동작 방식  (Authorization Code Flow)

1. 클라이언트가 인증 요청

  • 사용자가 웹 또는 모바일 애플리케이션에서 로그인을 시도.
  • 클라이언트 애플리케이션이 OpenID Provider(OP)로 인증 요청을 보냄.
    • 요청 URL에는 다음과 같은 정보가 포함됨:
      • 클라이언트 ID
      • 리디렉션 URI
      • 요청한 스코프(scope): openid, profile, email 등
      • 응답 타입(response_type): code (Authorization Code Flow)
      •  

2. 사용자 인증 (Authorization Endpoint)

  • OP가 인증 화면(로그인 페이지)을 표시.
  • 사용자는 자신의 계정 정보를 입력하고 인증을 완료.
  • 인증 성공 시, 사용자의 동의(consent)를 받음.
    • 예: "이 앱이 내 이메일과 프로필 정보에 접근해도 되나요?"
    •  

3. Authorization Code 발급

  • 사용자가 인증과 동의를 마치면 OP는 클라이언트로 Authorization Code를 전달.
  • 이 코드는 일회용으로 사용되며, 보안상 민감한 데이터를 포함하지 않음.
  •  

4. Authorization Code 교환 (Token Endpoint)

  • 클라이언트가 Authorization Code를 OP의 Token Endpoint로 보냄.
  • 클라이언트 인증 정보(Client ID와 Secret)를 함께 포함하여 요청.
  • OP는 Authorization Code를 검증하고 다음을 반환:
    • ID Token: 사용자의 인증 정보 (JWT 형식)
    • Access Token: UserInfo Endpoint에 접근할 수 있는 권한
    • (옵션) Refresh Token: 토큰 갱신용
    •  

5. 사용자 정보 요청 (UserInfo Endpoint)

  • 클라이언트가 Access Token을 사용해 UserInfo Endpoint로 요청.
  • OP는 사용자 프로필 정보를 반환 (예: 이름, 이메일, 프로필 사진).
  •  

6. 클라이언트에서 인증 완료

  • 클라이언트는 받은 ID Token을 검증하여 사용자 인증이 성공했는지 확인.
  • 사용자 정보를 저장하거나 세션을 생성하여 로그인 상태 유지.

주요 플로우 요약 

  1. 클라이언트 → "로그인 요청"
  2. OP → "로그인 화면 제공"
  3. 사용자가 인증 → OP → "Authorization Code 전달"
  4. 클라이언트 → "Authorization Code로 토큰 요청"
  5. OP → "ID Token + Access Token 반환"
  6. 클라이언트 → "ID Token 검증 → 사용자 인증 완료"

 

 

반응형

'웹개발 > 통신 · 프로토콜' 카테고리의 다른 글

JWT란  (0) 2024.07.09
CORS  (0) 2023.07.26
웹소켓  (0) 2023.07.26