본문 바로가기
CS

OAuth2.0 개념

by 감자b 2025. 1. 2.

기존에 로그인 방식은 사이트마다 별도로 가입을 해 사용자가 많은 비밀번호를 사용해야 하며, 서비스 제공자 입장에서는 개인 정보를 직접 관리해야하므로 부담이 있었다.

OAuth(Open Authorization)는 인증과 권한 위임을 위한 개방형 표준 프로토콜로, 사용자가 자신의 개인정보를 제3자 서비스(우리 앱)에 직접 제공하지 않고도, 해당 서비스가 플랫폼 내의 정보에 접근할 수 있도록 권한을 부여하는 방식으로 사용한다.

OAuth2.0 용어

Authentication(인증) Id/Password 확인하여 신원을 체크
Authorization(인가) 사용자가 플랫폼에 있는 개인 정보 사용을 동의하여 권한 부여
Resource 서버가 관리하는 사용자 정보
Authorization Code 인가 단계 이후 Auth Server가 우리 앱에 전달하는 코드 access token으로 교환하기 위해 사용
Access token 사용자 정보에 접근 가능한 Rest API를 호출하기 위한 권한을 부여받는 토큰
Refresh Token Access token의 유효 기간이 만료될 시 다시 인증/인가 단계를 수행하여 Access token을 받는 과정이 번거로움
→ 로그인을 하지 않고 새 Access token을 발급받기 위한 토큰

 

OAuth2.0을 구성하는 4가지

Resource owner 개인 정보 주체 (사용자)
Resource server 사용자의 개인 정보를 가지고 있는 주체로 서비스 제공자 (Google, Naver 등 API 서버)
Authorization Server 인증, 인가를 수행하는 서버 (Google, Naver 등 인증 서버) 로그인, 권한, 토큰 등을 관리
Client 개인 정보를 필요로 하는 주체 (우리 앱)

 

OAuth2.0 Grant Type

OAuth2.0은 다음과 같은 권한 부여 타입을 지원한다.

  1. Authorization Code Grant Type
  • 클라이언트가 브라우저를 통해 사용자를 인증 서버로 리다이렉션하여 권한을 부여받고, 인증 코드(Authorization Code)를 사용해 액세스 토큰을 요청하는 방식.
  • 액세스 토큰은 서버 간 통신으로만 전달되므로 클라이언트에 노출이 되지 않아 안전한 유형이다.
  1. Implicit Grant (Deprecated)
  • 클라이언트가 브라우저를 통해 액세스 토큰을 직접 요청하는 방식
  1. Resource Owner Password Credentials Grant (Deprecated)
  • 클라이언트가 사용자의 자격 증명(사용자명, 비밀번호)을 직접 받아 인증 서버에 요청하는 방식
  1. Client Credentials Grant
  • 클라이언트가 자신의 자격 증명(Client ID와 Secret)을 사용해 직접 인증 서버에 요청하는 방식
  1. Device Code Grant
  • 디바이스가 브라우저를 통해 사용자에게 권한을 요청한 뒤, 디바이스 자체가 서버와 통신하여 액세스 토큰을 요청하는 방식
  1. Refresh Token Grant
  • 클라이언트가 기존 refresh token을 사용해 새 access token을 요청하는 방식
  1. PKCE
  • Authorization Code Grant 방식에 Code Verifier, Code Challenge를 추가하여 강화된 보안을 제공
    • Code Verifier : 클라이언트에서 생성하는 고유한 문자열
    • Code Challenge : Code Verifier로부터 생성된 해시 값

공격자가 Authorization Code를 탈취하더라도 Code Verifier가 없으면 Access Token을 요청할 수 없도록 하였다.

 

여기서는 일반적으로 가장 많이 사용되는 Authorization Code Grant Type의 흐름에 대해서 알아보도록 하겠다.

 

Authorization Code Grant Type 흐름

위 방식의 권한 부여 과정은 크게 3가지로 이루어져 있다.

  1. 인가 코드 (Authorization code) 받아오기
  2. 우리가 사용하는 네이버, 카카오 등 Resource server에 접근하기 위한 Access token을 받아오기
  3. 해당 토큰으로 사용자 정보 가져오기

'CS' 카테고리의 다른 글

WebSocket & STOMP의 개념  (0) 2025.02.23
Polling, Long Polling, SSE(Server Sent Event)  (0) 2025.01.13
HTTP의 이해  (0) 2024.12.27
CORS  (0) 2024.12.26
프로세스와 스레드  (1) 2024.12.26