ref. https://junuuu.tistory.com/405?category=1014988

OAuth 2.0 이란?

Open Authentication의 약자로 다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜

제 3의 앱이 자원의 소유자인 서비스 이용자를 대신하여 서비스(구글, 네이버, 카카오)를 요청할 수 있도록 자원 접근 권한을 위임하는 방법

사용자에게 인증을 제공하지만, 주된 목적으로는 인증된 사용자의 이름이나 이메일을 가져오는 등의 권한을 제공해준다.

OAuth의 등장 배경

애플리케이션에서 타 서비스를 사용하고 싶다면, 간단하게 고객의 아이디/비밀번호를 받아서 로그인하면 된다.
하지만, 이에 세 가지 문제점이 존재한다.

  1. 타 서비스에서는 애플리케이션을 신뢰하지 못한다.
  2. 애플리케이션에서 네이버의 정보를 관리하는 것이 부담이다. (보안적으로 신경 쓸 포인트가 증가한다)
  3. 사용자는 애플리케이션을 신뢰할 수 없다.

이런 문제점을 해결하고 안전하게 사용하기 위해 OAuth가 등장하게 되었다.

  • Resource Owner: 사용자
  • Resource Server: API 서버
  • Client: 클라이언트
  • Authorization Server: 권한 부여 서버
  • Authentication Server: 인증 서버

Authorization Code Grant 방식을 통한 인증 과정

OAuth 2.0은 총 4가지 인증 방법을 가지고 있는데, 비교적 안전한 Authorization Code Grant 방식에 대해 설명해보고자 한다.

  • 애플리케이션은 사용자로부터 Authorization Code를 받는다.
  • 애플리케이션은 Authorization Server에게 Authorization code로 Acccess Token을 발급받는다.
  • 애플리케이션은 Access Token으로 Resource Server에게 자원을 요청한다.
  • 사용자에게 제공

각 포지션의 역할

  • 프론트엔드
    • OAuth 서버로 로그인 요청 후, Authorication Code를 발급받아 백엔드에 전달
  • 백엔드
    • Authorization Code로 OAuth 서버에 Access Token 요청
    • Access Token으로 이름, 이메일 등의 정보 요청
    • DB에 존재하지 않는 유저라면 새로 등록, DB에 존재하는 유저라면 정보 업데이트
    • 이후 프론트엔드에게 Access Token과 Refresh Token 반환