JWT (JSON Web Token)
-구성: Header, Payload, Signature
헤더, 페이로드, 시그니처 이렇게 3등분되어 구성되어 있다. (일단 3개로 나눠져있다로 외우자.)
들어있을때 뭔가 암호화되어 들어있어댜 될텐데, 알고리즘으로 Base64 인코딩해서 값이 변환이 되어있다.(이건 몰라도 패스해도된다.)
Header : 토큰의 종류와 암호화 알고리즘에 대한 정보가 들어있음.
예시:
{ "alg": "HS256", "typ":"JWT"} 알고리즘 256에 JWT 타입이구나~ 라고 알 수 있다.
Payload: 발행일, 만료일, 사용자ID등 검증에 필요한 정보가 들어있다.
Signature: Base64로 인코딩된 Header와 Payload를 알고리즘으로 암호화 시켜서 들어있다. 그말은 즉 시그니처를 복호화 시켜보면 Header랑 payload 비교해봐서 맞는건지 똑같은건지 변조된건지 알 수 있다는 사실이다!!
3개가 . 으로 나눠져 있는데, ey어쩌고125125215 쩜 . 어쩌고125215125 쩜. 어쩌고125215215 이렇게 나눠져있는데,
디코드를 해보면 앞부분이 헤더, 중간이 페이로드, 세번째가 시그니처다.
여기까지 삼등분에 대한 개념이 이해가 되어있어야 토큰이 조작되었는지 아닌지 딱 알 수가 있다.
jwt.io 사이트에 들어가면 본인이 얻은 토큰을 넣어보면 decoded 시켜볼 수 있다.
여기 오른쪽아래 your-256-bit-secret 있으면 여기에 값을 넣어보면 왼쪽 시그니처가 계속 변경되는걸 알 수 있다.
이제 Refresh Token 과 Access Token에 대해서 알아보자.
Access Token : api를 보낼때 담아서 보내면 원하는 정보를 얻을 수 있다.
Refresh Token: access Token이 만료돼서 사용을 못하게 되면 Refresh Token을 보내서 새로운 Access Token을 발급받아서, 오래된 Access Token을 버리고 새로운 Access Token으로 데이터를 요청할 수 있도록 도와주는 토큰이다.
Access Token 사용과정
1.Header에 아래처럼 토큰을 담아서 API를 던진다.
authorization: "Bearer $accessToken"
2.API 서버에서 AcessToken을 검증한다.
3.DB에 데이터 를 요청해서 받아온다음,
4.사용자에게(client) 데이터를 돌려준다.
Access Token을 던지면, 토큰이 만료되었을 수 도 있기 때문에 검증로직을 넣어서 갱신할 수 있도록 해야된다.
아래 재발급 후 다시 API를 요청하는 문장을 천천히 읽어보기 바란다.
API 요청 > Acess Token 검증했는데 만료되었다? > 401 만료 응답 > 만료되었으니 재발급 URL로 요청 (하면서 RefreshToken 보냄) > 서버에서 Refresh Token보고 검증 해서 통과 > 새로운 Access Token 돌려줌 > 클라이언트는 이 Access Token 저장하고, 이걸로 다시 API Request > 하면 정상데이터 수신
*Refresh Token도 만료가 되었다? 그럼 어떻게 될까?
>이제는 Refresh Token도 만료가 되었기 때문에, 다시 로그인을 해야한다. 그래서 로그인을 했어도 로그아웃 시켜버리고 로그인페이지로 안내해주면 된다. 보안적으로 토큰을 신뢰할 수 있는 방법이 없기 때문이다.
!! 궁금하신 내용은 언제든지 댓글로 알려주세요 !!
'ETC > 기타 프로그래밍' 카테고리의 다른 글
zsh: command not found: brew 해결방법 (0) | 2023.09.21 |
---|---|
Support for password authentication was removed on August 13, 2021.에러 해결방법 GIT (0) | 2023.09.19 |
H2 Database 3분만에 설치하기 [MAC] (0) | 2023.04.23 |
YELLONGIT 소개 (0) | 2023.01.04 |
프로그래머스[Java] - 모의고사 (0) | 2021.09.27 |