OAuth 2.0이란?

OAuth 2.0은 사용자의 비밀번호를 직접 공유하지 않고도 제3자 애플리케이션에 제한된 권한을 위임할 수 있게 해주는 인가(Authorization) 프레임워크입니다. 예를 들어, 어떤 앱이 여러분의 Google 계정 정보에 접근하려 할 때, Google 비밀번호를 직접 넘기는 대신 해당 앱이 내 프로필과 이메일을 볼 수 있도록 허용하는 토큰을 발급하는 방식입니다.

중요한 점은 OAuth 2.0은 인가(Authorization) 프로토콜이지, 인증(Authentication) 프로토콜이 아니라는 것입니다. 인증의 경우, OpenID Connect(OIDC)가 OAuth 2.0 위에 얹어서 처리합니다.

주요 역할자 (Roles)

OAuth 2.0에는 네 가지 주체가 등장합니다.

인가 흐름 (Grant Types)

인가가 진행되는 대표적인 흐름은 아래와 같습니다.

image.png

  1. 사용자가 클라이언트 앱에서 "Google로 로그인" 같은 버튼을 누름
  2. 클라이언트는 사용자를 인가 서버로 리다이렉트 (이때 client_id, redirect_uri, scope 등을 전달)
  3. 인가 서버가 사용자에게 "이 앱이 ○○에 접근하려 합니다. 허용하시겠습니까?" 동의 화면을 띄움
  4. 사용자가 허용
  5. 인가 서버가 짧은 수명의 Authorization Code를 클라이언트에 전달 (redirect_uri로)
  6. 클라이언트는 받은 code와 client_secret을 함께 서버 백엔드에서 인가 서버로 보냄
  7. 인가 서버가 검증 후 Access Token(및 선택적으로 Refresh Token) 발급
  8. 클라이언트는 이 토큰을 Authorization: Bearer <token> 헤더에 담아 리소스 서버에 API 호출