Authentication - JWT
JWT 란?
풀네임 Json Web Token.
Json 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰을 뜻한다.
번외 : 자꾸 JMT 토큰이라고 읽고쓰게된다.ㅋㅋㅋㅋㅋㅋ
JWT의 구조
1. Header
- 어떤 종류의 토큰인가?
- 어떤 알고리즘으로 암호화 하는가?
ex)
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload
- 유저의 정보
- 권한을 부여 받았는가?
- 기타 필요한 정보
ex)
{
"sub": "someInformation",
"name": "phillip",
"iat": 151623391
}
3. Signature
- Header, Payload를 base64인코딩한 값과 salt값의 조합으로 암호화된 값
ex)
HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);
토큰기반 인증 절차
1 . 클라이언트가 서버에 아이디/비밀번호를 담아 로그인 요청을 보낸다.
2 . 아이디/비밀번호가 일치하는지 확인하고, 클라이언트에게 보낼 암호화된 토큰을 생성한다.
2-1. access/refresh 토큰을 모두 생성한다.
2-2. 토큰에 담길 정보(payload)는 유저를 식별할 정보, 권한이 부여된 카테고리(사진, 연락처, 기타등등)이 될 수 있다.
2-3. 두 종류의 토큰이 같은 정보를 담을 필요는 없다.
3 . 토큰을 클라이언트에게 보내주면, 클라이언트는 토큰을 저장한다.
3-1. 저장하는 위치 : local storage, cookie, react의 state 등 다양하다.
4 . 클라이언트가 HTTP 헤더(authorization 헤더)에 토큰을 담아 보낸다.
4-1. bearer authentication을 이용
5 . 서버는 토큰을 해독하여 "아 우리가 발급해준 토큰이 맞네!" 라는 판단이 될 경우, 클라이언트의 요청을 처리한 후 응답을 보내준다.
토큰기반 인증의 장점
1 . Statelessness & Scalability (무상태성 & 확장성)
서버는 클라이언트에 대한 정보를 저장할 필요가 없다.
토큰을 헤더에 추가함으로 인증절차가 완료됨.
2 . 안전하다
암호화 한 토큰을 사용하고, 암호화 키를 노출 할 필요가 없기 때문!
3 . 어디서나 생성 가능하다
토큰을 확인하는 서버가 토큰을 꼭 만들지 않아도 된다.
4 . 권한 부여에 용이하다
토큰의 payload(내용물) 안에 어떤 정보에 접근 가능한지 정할 수 있다.
ex) 서비스의 사진과 연락처 사용권한만 부여
Author And Source
이 문제에 관하여(Authentication - JWT), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeonlisa/Authentication-JWT저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)