카카오를 이용하여 OAuth 2.0 이해하기! & 조금의 JWT

최혜원·2021년 11월 20일
0
post-thumbnail

SSAFY 특화프로젝트 과정 중 내가 로그인 모듈 구현을 담당하게 되었고, 자체 로그인 시스템을 만드는 것보다 효율적으로 로그인 모듈을 구현할 수 있을 것이라 판단하여 Kakao Login API를 이용하기로 하였다. 그 때 당시 무작정 개발을 진행했는데 면접을 앞두고 복기를 하면서 면접때 관련으로 JWT 질문도 들어왔었기에 정리하고자 포스팅을 작성한다.

OAuth 2.0이란?

OAuth 2.0 이란, 인가(Authorization)과 인증을 위한 오픈 스탠다드 프로토콜로, 어플리케이션에서 다른 서비스를 연동할 수 있는 기술이다. 해당 서비스는 사용자의 모든 정보를 알려주는 것이 아닌 Token을 발급하여 해당 서비스에 부분적으로 접근할 수 있는 권한을 부여한다.

OAuth 2.0 과정 (with Kakao)

  1. 사용자가 어플리케이션을 통해 카카오 로그인을 수행하게 된다.
  2. 카카오 로그인 버튼을 누르면 카카오는 인가 코드를 미리 설정한 redirect_url로 되돌려준다.
  3. 어플리케이션은 redirect_url를 통해 인가 코드를 얻고 이를 가지고 카카오 서버에 AccessToken 발급을 요청한다.
  4. 카카오는 인증 코드를 확인하여 토큰을 어플리케이션에 전달한다.

토큰 정보

  • Access Token : 권한 증명 역할로 비교적 Refresh Token 보다는 유효기간이 짧다.
  • Refresh Token : 일정 기간동안 인증을 거치지 않고 Access Token을 갱신할 수 있게 하는 역할. Access Token보다 유효기간이 길다.

토큰 기반 인증방식을 사용하는 이유

-> 토큰을 사용하게 될 경우 별도의 저장소가 필요없다. 이를 무상태,Stateless 하다고 한다. 상태정보를 저장하지 않으면, 서버는 클라이언트측에서 들어오는 요청만으로만 작업을 처리하게 된다. 이렇게 상태가 없는 경우 클라이언트와 서버의 연결고리가 없기 때문에 서버의 확장성이 높아진다.
하지만 난.. 썼다죠

JWT란?


Json Web Token의 약자로 인증에 필요한 정보들을 암호화시킨 토큰을 뜻한다. 사용자는 Access Token(JWT 토큰)을 HTTP 헤더에 실어 서버로 보내게 된다.
토큰을 만들기 위해서는 크게 3가지 Header, Payload, Signature가 필요하다.

  • Header : 토큰의 타입과 해싱 알고리즘을 지정하는 정보를 저장한다.
  • Payload : 토큰에 담을 클라이언트에 대한 정보가 들어있다. 이를 클레임(claim)이라 하고 name-value 형태로 저장된다.
  • Signature : 해당 토큰이 조작되었거나 변경되지 않았음을 증명하는데 사용된다.

-> 단점으로는 payload에 토큰 정보를 담고 있으므로 payload가 탈취된다면 정보를 볼 수 있어 중요한 데이터를 넣지 않아야한다. 또한 상태를 저장하지 않아 한번 만들어지면 제어가 불가능하다. 임의로 삭제하기가 어려워 만료시간과 같이 저장해야 한다.

profile
멋쟁이 개발자가 될꺼야

0개의 댓글