인가(Authorization)
사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정
HTTP의 특징과 연관
request/response 요청과 응답
stateless한 성질(저장하지 않는 성질)
토근의 구조
JWT(JOSN Web Token)

- 토큰 타입과 해시알고리즘 정보가 들어간다.
- 헤더의 내용은 BASE64방식으로 인코딩해서 JWT 가장 첫 부분에 기록됨
'alg':'HS256',
'typ':'JWT'
Payload
- 토큰에 담을 정보가 들어있음
- exp와 같이 만료시간을 나타내는 공개 클레임
- 클라이언트와 서버간 협의하에 사용하는 비공개 클레임
- 위의 두가지 요소를 조합하여 작성한뒤 BASE64 인코딩하여 두번째 요소로 위치한다.
- 담기는 정보 {name: value} 한 쌍을 '클레임(claim)'이라 한다.
'user-id':1,
'exp':1539517391
Signature
우리서버가 발행하는 토큰이라는것을 알려주는 부분
-JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분
- 인코딩된 Header와 Payload 그리고 JWT secret(별도 생성)을
헤더에 지정된 암호 알고리즘으로 암호화하여 전송함
- 프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서는 전송받은 JWT의 서명부분을 복호화하여
서버에서 생성환 JWT가 맞는지 확인한다.
- 마치 계약서의 위변조를 막기위해 서로 사인하는 것과 같다고 보면됨
- 주의할 점은 header와 payload는 BASE64 인코딩한 것이므로(암호화아님) 누구나 원본을 볼 수 있으니 개인정보를 담아서는 안된다.
Header와 Payload값은 정보를 인코딩한 값이 들어있다.
인코딩한 값은 디코딩하면 원본값을 바로 알 수 있는데, 토큰값은 다른 사람이 위변조 할 수 없어야 하므로, 이를 검증하기 위해 비밀키로 해쉬하여 만든다.