* 인증(Authentication): 쉽게 말해서 로그인이라고 생각하면됨.
* 인가(Authorization): 한 번 인증을 받은 사용자가 이후 여러 서비스의 기능을 사용할 때 로그인 되어있음을 알고 허가를 해주는것.
* 세션: 세션ID를 사용하여서 사용자가 서버에 로그인 되어있음이 지속되는 상태(서버가 재부팅되어야 하는 상황이 오면 메모리에 있던것들은 전부 날아가게 되는것. --> 다시 로그인 작업을 해야함)
* JWT(Json Web Token, 토큰방식)
- 토큰방식: 로그인시 사용자의 정보를 찢어서 주는것이 아니라 그냥 줌(서버가 정보를 기억하지 않음)
1. 헤더
- type: type이 JWT여야 JWT인것.
- alg: 3번 서명값을 지정할 알고리즘이 만들어짐
- 헤더와 페이로드, 서버에 감춰놓은 비밀 값을 이 암호화 알고리즘에 넣고 돌리면 3번의 서명값이 나옴.
2. 페이로드
- 디코딩시 JSON형식으로 여러 정보들이 들어있음
- 토큰예시: https://jwt.io/
- 토큰을 누가 누구에게 발급햇는지, 언제까지 유효한지 등의 여러 정보를 서비스측에서 원하는대로 담을수 있음.
- 이렇게 토큰에 담긴 사용자 정보의 데이터를 claim 이라고 함.
3. 서명
* 결점
- 세션처럼 stateful 해서, 모든 사용자들의 상태를 기억하고 있다는 건 구현하기 부담되고 고려사항도 많지만 이게 된다면 기억하는 대상의 상태를 언제든 제어할 수 있다는 것. 하지만 토큰은 서버에서 정보를 따로 기억하는것도 아니고 토큰정보를 이미 줬기에 따로 통제를 하기는 힘들다는 단점이 있다. 토큰을 탈취 당했을 경우 토큰을 무효화할 방법도 없다는 것이 단점.
'skill' 카테고리의 다른 글
Chrome 개발자 도구로 디버깅하기 - 디버깅, breakpoint 개념 및 사용 (0) | 2022.01.07 |
---|