본문 바로가기

웹 개발 한걸음

[OAuth2.0] 소셜 로그인 구현하기 -1- OAuth란?

 

[OAuth2.0] 소셜 로그인 구현하기 -1- OAuth란?

[OAuth2.0] 소셜 로그인 구현하기 -2- 카카오 어플리케이션 등록

[OAuth2.0] 소셜 로그인 구현하기 -3- 카카오 로그인

[OAuth2.0] 소셜 로그인 구현하기 -4- 카카오, 네이버, 구글 로그인

 

 


 

    0. 소셜 로그인?    

 

  • 지금 각종 서비스를 이용하기 위해 여러 웹 사이트를 들어가보면 많은 곳에서 "구글로 로그인", "카카오로 로그인", "네이버로 로그인" 등을 쉽게 볼 수 있다. 
  • 이는 해당 서비스를 위해 별도의 번거로운 회원가입 절차를 진행하지 않고도 이미 가지고 있는 카카오 계정, 페이스북 계정, 구글 계정, 일명 "뿌리 계정"으로 간편하게 서비스를 이용할 수 있도록 해주는 기능이다.
  •  서비스별로 아이디와 암호를 모두 외우는 대신 뿌리계정 하나의 아이디와 암호만 외우는게 서비스 이용자에게 훨씬 쉽기 때문에 빠르게 보급되었다.

 

 


    1. OAuth란?   

OAuth의 로고

  • OAuth가 등장하기 이전에는 각 사이트 별로 사용자 Id와 Password를 입력해 인증을 하고 정보를 저장하는 방식이였다. 때문에 사용자 입장에서는 본인의 Id와 Password를 각 사이트에 등록해야 한다는 신뢰성적인 문제와 각 사이트에서는 사용자 정보를 관리하고 책임져야 하는 문제점이 있었다.
  • 또한 구글, 야후, 아마존 등은 이러한 사용자의 아이디와 암호가 노출되지 않기 위해 각자 개발한 회사의 방법대로 사용자를 확인하고 인증하였는데, 제각각 다 달랐다.

 

  • 제각각의 인증 방법을 표준화하고 위와 같은 신뢰성의 문제를 해결하기 위해 등장한 인증 방식이 OAuth이다.

 

  • OAuth는 Open Authorization의 약자이며 요청시 해당 소셜 서비스의 사용자 정보를 바로 알려주지 않고 대신 액세스 토큰(AceesToken)이라는 것을 발급해주도록 함으로써 해당 사용자가 이용할 수 있는 해당 소셜 서비스의 기능들에 부분적으로만 접근할 수 있는 권한을 부여해주는 인증 절차이다.  

 


    2. OAuth 기본 용어 정리   

  • Resource Owner(User) : 서비스를 이용하려는 사용자를 말한다.
  • Client(App) : 소셜 서비스와 연동시키고자 하는 서비스를 말한다. 
  • Resource Server (+ Authorization Server) : 연동하고자 하는 카카오, 페이스북, 구글 등 소셜 서비스의 서버를 말한다. 

    3. OAuth 간단 인증 과정    

 

깔끔하게 정리된 카카오 OAuth 인증방식의 도식화

 

카카오로 예를 들어보자. 

 

  0. 준비   

  • OAuth 인증을 위해선 가장 먼저 이용하려는 Resource Server(카카오)에 내 Application 등록하여 Client id, Client secret을 받고 Authorized redirect uri를 설정할 수 있다.

 

  1. 인증 코드(Authorization Code) 요청  

  • Client(내 웹 혹은 앱)에서 Resource Owner(사용자)가 Resource Server(카카오)로 리다이렉트하여 로그인하도록 유도한다.
  • 이때 Resource Server의 URL에 0번에서 준비해둔 Client id, Client secret, Authorized redirect uri를 함께 보낸다. 
  • 로그인에 성공하면 Resource Server에서는 설정해둔 Authorized redirect uri에 Authorization Code가 전달된다.

 

  2. 인증 코드로 토큰(Access Token&Refresh Token) 요청  

  • 1번에서 받은 코드, 0번에서 준비해둔 id, secret, redirect_uri로 액세스 토큰을 요청하고 이 네 가지 정보가 일치하면 Resource Server에서는 Access Toekenr과 Refresh Toekn이 client에 전달한다. 
필드 타입 설명
access_token string 접근 토큰, 발급 후 expires_in 파라미터에 설정된 시간(초)이 지나면 만료됨
refresh_token string 갱신 토큰, 접근 토큰이 만료될 경우 접근 토큰을 다시 발급받을 때 사용

 

 

  3. 액세스 토큰으로 API 호출  

  • 2에서 발급받은 Access Token으로 유저 정보를 Resource Server에 요청하면 Resource Server는 토큰의 유효성 확인 후  이상없을시 JSON형태로 미리 0에서 제공받고자 설정했던 정보를 리턴해준다.

 

 

어째 다소 생소할 수 있는데 요지는

Application등록 -> code요청&받기 -> code로 AccessToken요청&받기 -> AccessToken으로 사용자 정보 요청&받기

이게 끝이다. 코드를 보면 좀 더 이해하기 쉽다.

 

 


 

 

 

다음 글에서 라이브러리 없이 생으로 구현해보고

그 후 라이브러리로도 구현한 코드를 올릴 예정이다.

 

 

 

 

 

 

 

♣ 참고 및 인용