skill

JWT

잠수함 2021. 7. 25. 22:10
728x90

* 인증(Authentication): 쉽게 말해서 로그인이라고 생각하면됨.

* 인가(Authorization): 한 번 인증을 받은 사용자가 이후 여러 서비스의 기능을 사용할 때 로그인 되어있음을 알고 허가를 해주는것.

 

* 세션: 세션ID를 사용하여서 사용자가 서버에 로그인 되어있음이 지속되는 상태(서버가 재부팅되어야 하는 상황이 오면 메모리에 있던것들은 전부 날아가게 되는것. --> 다시 로그인 작업을 해야함)

 

* JWT(Json Web Token, 토큰방식)

- 토큰방식: 로그인시 사용자의 정보를 찢어서 주는것이 아니라 그냥 줌(서버가 정보를 기억하지 않음)

1. 헤더

- type: type이 JWT여야 JWT인것.

- alg: 3번 서명값을 지정할 알고리즘이 만들어짐

- 헤더와 페이로드, 서버에 감춰놓은 비밀 값을 이 암호화 알고리즘에 넣고 돌리면 3번의 서명값이 나옴.

 

2. 페이로드

- 디코딩시 JSON형식으로 여러 정보들이 들어있음

- 토큰예시: https://jwt.io/

- 토큰을 누가 누구에게 발급햇는지, 언제까지 유효한지 등의 여러 정보를 서비스측에서 원하는대로 담을수 있음.

- 이렇게 토큰에 담긴 사용자 정보의 데이터를 claim 이라고 함.

 

3. 서명

 

* 결점

- 세션처럼 stateful 해서, 모든 사용자들의 상태를 기억하고 있다는 건 구현하기 부담되고 고려사항도 많지만 이게 된다면 기억하는 대상의 상태를 언제든 제어할 수 있다는 것. 하지만 토큰은 서버에서 정보를 따로 기억하는것도 아니고 토큰정보를 이미 줬기에 따로 통제를 하기는 힘들다는 단점이 있다. 토큰을 탈취 당했을 경우 토큰을 무효화할 방법도 없다는 것이 단점.