IT상식_OAuth

조건웅·2023년 9월 7일
0

IT상식

목록 보기
6/8

OAuth이란?

OAuth는 Open Authorization의 약자로, 웹 및 모바일 애플리케이션에서 사용자 인증 및 권한 부여를 위한 개방형 표준 프로토콜이다. OAuth는 다른 웹 서비스나 애플리케이션에서 사용자의 데이터를 안전하게 엑세스하고 사용할 수 있도록 허용하고 사용자가 자신의 데이털르 제 3자와 공유할 때의 보안과 편의성을 제공한다.

주요 목적

  • 사용자 인증
  • 사용자의 권한 부여

OAuth를 사용하면 자신의 계정 정보를 제공하여 다른 서비스에서 로그인하지 않고 해당 서비스에 접근할 수 있다.

OAuth를 사용하면 사용자는 다른 서비스에 대해 자신의 데이터 엑세스 권한을 부여하건 취소할 수 있다.

즉, 깃헙이 되었든 구글 등의 계정을 통해서 우리는 로그인을 대신 진행할 수 있다는 것이다.

주요 구성 요소 및 흐름

대표적으로 우리는 총 크게 아래와 같이 3가지 구성요소로 본다.

  • 리소스 소유자(Resource Owner)
  • 클라이언트(Client)
  • 서비스 제공자(Service Provider)

리소스 소유자는 사용자라고 보면 되고 클라이언트는 OAuth를 통해 사용자의 데이터에 엑세스하려는 웹 애플리케이션, 서비스 제공자는 사용자의 데이터를 보유하고 있는 서비스 또는 플랫폼(예를 들어, 깃헙 또는 구글)이다.

흐름은 대충 아래와 같다.

  1. 클라이언트가 리소스 소유자에게 인증을 요청
  2. 리소스 소유자가 인증을 하기 위해 서비스 제공자에게 가서 인증 코드를 받는다.
  3. 서비스 제공자는 인증 코드를 리소스 소유자에게 주는 것이 아니라 클라이언트에게 제공한다.
  4. 클라이언트는 이렇게 제공 받은 인증 코드를 통해 인증 통과를 한다.

실제 시퀸스 다이어그램

OAuth2 소셜 로그인 시퀸스

위의 포스팅에서 정말 자세하게 설명되어 있어 공유한다.

해당 포스팅에는 아래와 같은 시퀸스 다이어그램이 있다.

위의 시퀸스 다이어그램 글로 풀어보면 아래와 같다.

  1. 리소스 소유자가 프론트엔드 쪽에 소셜 로그인 시도
  2. 프론트엔드쪽에서 이를 수신하고 백엔드에 요청
  3. 백엔드는 인증을 요청하기 위해 사용자에게 서비스 제공자에 로그인하라고 주소를 프론트 엔드쪽에 보내준다.
  4. 프론트엔드는 이러한 주소를 사용자에게 보낸다.
  5. 리소스 소유자는 서비스 제공자의 사이트 로그인을 진행한다.
  6. 이렇게 로그인이 정상적으로 됬다면 리소스 소유자가 아닌 백엔드로 인증 코드를 보낸다.
  7. 백엔드는 인증 코드를 받았다면 Resource Server에 접근하기 위해 엑세스 코드를 받기 위해 요청한다.
  8. 이러한 요청으로 백엔드가 엑세스 코드를 받았다면 이를 기반으로 사용자 정보를 받는다.
  9. 성공적으로 사용자 정보를 받았다면 백엔드 DB에 저장해두고 JWT토큰을 생성하되 Refesh토큰을 추가로 생성한다.
  10. 이렇게 생성한 두 토큰을 프론트엔드쪽에 전달한다.
  11. 프론트엔드쪽에서 사용자 정보를 요청하면 토큰을 확인하고 사용자 정보를 준다.
  12. 이렇게 받은 사용자 정보를 리소스 소유자에게 보여준다.

★ Refesh토큰을 생성하는 이유는 이전의 JWT토큰 포스팅에서 말했듯이 유효 기간이 존재하기 때문에 유효 기간이 지나면 토큰은 버려진다. 이렇게 토큰이 버려진다면 우리는 귀찮게 또 로그인을 해야할 것이다. 이를 방지하기 위해 JWT토큰을 만들 때 Refesh토큰을 만들어 둬서 만약 JWT토큰이 만료 되었을 때 쿠키에서 Refesh토큰을 꺼내서 JWT토큰을 새로 만든다.

profile
내게 남은 소중한 자식은 누군지 아나? 쑨양이다!

0개의 댓글