Authentication(인증)
로그인, 아이디와 패스워드 등을 통해 특정 서비스에 일정 권한이 주어진 사용자임을 인증 받는것
필요이유 - 서비스 사용추적
필요한것 - ID Email Password(노출되면 안됨)
Authorization(인가)
사용자가 한번 인증을 받은 후에 그 사용자가 특정 리소스에 액세스 할수 있는지 여부를 결정하는 프로세스
ex)
네이버에 로그인으로 인증을 한 후 블로그에 글을 쓰거나 댓글을 다는 등 내 계정으로 ‘만’ 할수 있는 활동을 시도할때 네이버가 나의 로그인 여부를 보고 허가 해주는 것
💡 매번 로그인을 하지 않는이유쉽게 생각하면 현재 사용하고있는 id 카드가 있다. 발급과정은 인증이고
우리가 몇층에 갈수있는지 권한을 알려주며 다른층을 눌렀을때 아무런 반응이 오지않게 하는것이 인가 이다.
인가에 연관된 기술
전통적으로 많이 사용 되어 온 방식으로 서버 기반의 인증방법
세션 id를 사용해서 어떤 사용자가 서버에 로그인 되어있다는 상태를 지속하는 것을 ‘세션'이라고 한다.
How to Authorization
단점
사용자가 로그인을 하면 토큰을 주는데 이 토큰을 서버가 기억하고 있지 않는다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
암호화된 3가지 데이터를 이어붙인 형태 (aaa.bbb.ccc)로 구성되어있다.
JWT는 세션처럼 모든 사용자들의 상태를 기억하고 있지 않다.
따라서 기억하는 대상들의 상태를 언제든 제어할수 있지 않다.
예를들어
세션을 이용해서 로그인을 만들경우 한 기기에서만 로그인 가능한 서비스를 만들고 싶을때 pc에서 로그인하면 핸드폰에서의 세션 값은 사용 못하게 하는등의 제어가 가능하다.
하지만 JWT는 이미 발행한 토큰을 뺏을수도 없다. 또한 토큰을 탈취당해도 무효화할 방법이 없다.
이에 대한 해결방안으로는 로그인시 accessToken, refreshToken 두개의 토큰을 주는 방법이 있다.
accessToken : 매번 인가를 받을때 사용하는 토큰 , 보통 수명이 짧다.
refreshToken accessToken의 수명이 다했을 때 accessToken을 재발행 받기위한 토큰으로 보통 2주정도의 유효기간을 가진다.