[Server] OAuth를 통한 소셜 로그인

sominpark·2021년 9월 8일
0

server

목록 보기
11/13

OAuth

1. 개념

  • 웹이나 앱에서 흔히 찾아볼 수 있는 소셜 로그인 인증 방식은 OAuth 2.0 기술을 바탕으로 구현
  • 전통적으로 직접 작성한 서버에서 인증을 처리해주는 것과는 달리, OAuth는 인증을 중개해주는 메커니즘
  • 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공함으로써 프로세스를 단순화
  • 이미 사용자 정보를 가지고 있는 웹 서비스(google, naver 등)에서 사용자의 인증을 대신해주고 접근 권한에 대한 토큰을 발급한 후, 이를 이용해 해당 서비스의 서버에서 인증 하는 개방형 표준 프로토콜
  • 인증(Authentication)을 다른 서비스에 맡길 뿐, 접근 권한 관리(Authorization)는 여전히 해당 서비스의 서버가 담당

1) 알아야 할 용어

(1) Resource Owner

  • 액세스 중인 리소스의 유저

(2) Client

  • Resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램
  • 클라이언트는 서버, 데스크탑, 모바일 또는 기타 장치에서 호스팅할 수 있음

(3) Resource server

  • client의 요청을 수락하고 응답할 수 있는 서버로 유저의 리소스를 가지고 있음

(4) Authorization server

  • 클라이언트 및 리소스 소유자를 성공적으로 인증한 후 Resource server가 액세스 토큰을 발급받는 서버

(5) Authorization grant

  • 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명의 유형으로 대표적인 Grant type중 하나

(6) Authorization code

  • access token을 발급받기 전에 필요한 code
  • client ID와 client secret을 포함한 일종의 허가증
  • client ID로 code를 받아온 후, client secret과 code를 이용해 Access token을 받아옴

(6) Access token

  • 보호된 리소스에 액세스하는 데 사용되는 credentials
  • Authorization code와 client secret을 이용해 받아온 이 Access token으로 resource server에 접근을 할 수 있음

(7) Scope

  • 토큰의 권한을 정의, 즉 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위

2) 과정

  • Resource Owner : Client로 접근
  • Client : Resource Owner를 Authorization server로 리다이렉트
  • Resource Owner : Authorization server에 Resource Owner의 엑세스 권한 부여 요청
  • Authorization server : Client에 Authorization Code 제공
  • Client : Authorization Code를 Access token으로 교환
    - Access token을 통해 Resource에 엑세스 가능 즉, Access token을 발급받은 Client는 Authorization server를 거치지 않고 Resource server와 직접적으로 소통
    - Access token과 함께 Resource server에 API 요청을 보내면 Resource server는 Client가 요청한 리소스를 전달

2. Grant type

  • 클라이언트가 엑세스 토큰을 얻는 방법

종류

  1. Authorization Code Grant Type
  2. Implicit Grant Type
  3. Client Credentials Grant Type
  4. Resource Owner Credentials Grant Type
  5. Refresh Token Grant Type

1) Authorization Code Grant Type

  • 엑세스 토큰을 받아오기 위해서 먼저 Authorization Code를 받아 엑세스 토큰과 교환하는 방법

Authorization Code 절차를 거치는 이유 : 보완성 강화

클라이언트에서 client-secret을 공유하고 엑세스 토큰을 가져오는 것은 탈취의 위험이 있기에 클라이언트에서는 client ID만을 이용해 Authorization Code만 받아오고 서버에서 client-secret까지 포함하여 엑세스 토큰을 요청하는 것

2) Refresh Token Grant Type

  • Access token이 만료될 때 마다 소셜 로그인을 갱신해야 한다면 사용자의 편의가 떨어짐
  • 유효 기간이 지나서 만료된 Access token을 편리하게 다시 받아오기 위해 사용하는 방법
  • Access token보다 Refresh Token의 유효 기간이 대체로 조금 더 길게 설정하기 때문에 가능한 방법
  • server 마다 Refresh Token에 대한 정책이 다르기 때문에 Refresh Token을 사용하기 위해서는 사용하고자 하는 server의 정책을 살펴봐야 함

과정

  • Client : Refresh Token을 통해 Authorization server에 새로운 Access token을 요청
  • Authorization server : Refresh Token을 확인한 후 Access token 발급
  • Client : Access token을 통해 Resource에 엑세스 가능

0개의 댓글