바로, 사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정입니다.
토큰은 백에서 관리하고 발급하고, 프론트가 들고다니며 관리합니다.
토큰은 메타데이터이고, http에서 header에 보관합니다.
위의 그림은 JWT의 구조입니다.
헤더 에는 어떤 정보가 들어갈까요 ?
- 토큰의 타입과 해시 알고리즘 정보가 들어갑니다.
- 헤더의 내용은 BASE64 방식으로 인코딩해서 JWT의 가장 첫 부분에 기록됩니다.
- ex) {"alg": "HS256", "typ":"JWT"}
- 내용에는 exp와 같이 만료시간을 나타내는 공개 클레임
- 클라이언트와 서버간 협의하에 사용하는 비공개 클레임
- 위의 두가지 요소를 조합하여 작성한 뒤 BASE64 인코딩하여 두번째 요소로 위치합니다.
- ex) {"user-id":1, "exp":1539517391}
- JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분
- 시그니쳐는 BASE64URL 인코드된 header와 payload 그리고
JWT secret(별도 생성)을 헤더에 지정된 암호 알고리즘으로 암호화하여
전송합니다.(복호화 가능)- 프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서는 전송받은 JWT의 서명부분을 복호화 하여 서버에서 생성한 JWT가 맞는지 확인합니다.
- 계약서의 위변조를 막기위해 서로 사인하는 것과 같다고 보면 됩니다.
- 마지막으로 주의할 점은 header와 payload는 BASE64 인코딩한 것이므로
(암호화 아님) 누구나 원본을 볼 수 있으니 개인정보를 담아서는 안됩니다.