토큰기반 인증 중 대표적인 JWT (JSON Web Token)을 사용할 것이다.
토큰은 cookie에도 로컬스토리지에도 리액트의 state에도 저장할 수 있다.
보호된 정보들에 접근할 수 있는 권한부여에 사용한다. Access token의 유효기간이 만료된다면 refresh token을 사용하여 새로운 access token을 발급받는다. 이때, 유저는 다시 로그인할 필요가 없다.
JWT는 위 그림과 같이 . 으로 나누어진 3부분이 존재한다.
어떤 종류의 토큰인지, 어떤 알고리즘으로 sign(암호화)할지 적혀있다.
{
"alg": "HS256",
"typ": "JWT"
}
정보가 담겨있다. 권한을 담을수도 있고 유저이름등을 담아서 암호화시킨다. 비밀번호같이 민감한 정도는 담지 않는것이 좋다
원하는 비밀키(암호화에 추가할 salt)를 사용해서 암호화한다.
세션 - 서버 부담
토큰 - 클라이언트 부담
어디에 인증정보를 저장하는가의 차이이다.
무상태성 & 확장성
서버는 클라이언트에 대한 정보를 저장할 필요가 없다.
토큰을 헤더에 추가함으로 인증절차가 완료된다. 이때 하나의 토큰으로 여러 서버에서 인증을 받을 수 있다.
안정성
암호화한 토큰을 사용한다. 암호화 키를 노출할 필요가 없다.
어디서나 생성 가능
토큰을 생성하는 서버가 꼭 토큰을 만들지 않아도 된다.
토큰생성용 서버를 만들거나 다른회사에 토큰작업을 맡겨도 된다.
권한 부여에 용이
토큰의 payload(내용물) 안에 어떤 정보에 접근 가능한지를 정의할 수 있다.
ex)사진과 연락처 사용권한 부여 / 사진 권한만 부여 / 연락처 권한만 부여