jwt 토큰 decode 하기
jwt 토큰 decode 함수
2023-08-31
JSON 웹 토큰(JWT)
일반적으로 헤더.페이로드.서명 으로 구성되어 있다.
1.헤더 - 어떤 알고리즘으로 암호화 할것인지
2.데이터 - 전달하려는 정보, 사용자의 id, name 등
3. 서명 - 서버가 지정한 secret key로 암호화 시켜 토큰을 변조하기 어렵게 만듬
이 세 부분을 Base64url로 인코딩해
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI
위와 같은 형태로 파싱해 사용한다.
jwt 데이터 부분에서 정보를 가져와 사용할 수 있는데, decoding 해주어야 한다.
export const decodeJwtResponse = (token: string) => {
let base64Url = token.split('.')[1]
let base64 = base64Url?.replace(/-/g, '+')?.replace(/_/g, '/')
let jsonPayload = decodeURIComponent(
atob(base64)
.split('')
.map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
})
.join('')
)
return JSON.parse(jsonPayload)
let base64Payload = token.split('.')[1]
let payload = Buffer.from(base64Payload, 'base64')
return JSON.parse(payload.toString())
}
atob 함수는 node에서 더이상 지원하지 않아 아래로 수정
export const decodeJwtResponse = (token: string) => {
let base64Payload = token.split('.')[1]
let payload = Buffer.from(base64Payload, 'base64')
return JSON.parse(payload.toString())
}
token을 split해 1번째 데이터에 해당하는 부분을 가져온 다음
node에서 지원하는 Buffer 객체를 사용해 바이너리로 변환
base64로 인코딩한 후 JSON으로 파싱한다