라이브러리 없이 JWT 토큰 클레임 읽기
세부 사항으로 이동하지 않고(예: jwt.io/introduction에서 읽을 수 있음) JWT는 점으로 구분된 세 부분으로 구성됩니다.
header.payload.signature
중간 부분인 탑재량은 우리에게 흥미로웠습니다. 엔터티(예: 사용자) 및 일부 추가 데이터에 대한 설명인 클레임을 포함합니다.
이 게시물의 목적을 위해 다음과 같은 jwt.io의 예제 토큰을 사용합니다(디버거에서 열려면 링크를 클릭하십시오!).
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
토큰의 페이로드는 base64 인코딩된 JSON 객체입니다. 즉, 속성에 쉽게 액세스할 수 있도록 이를 디코딩하고 이 JSON 문자열을 사전에 로드할 수 있습니다.
여기에는 까다로운 부분이 하나뿐입니다. 바로 base64 패딩입니다! JWT의 페이로드는 영숫자만 있으며
=
문자가 없습니다. 제대로 디코딩되도록 하려면 페이로드 문자열에 최대 패딩(==
)을 추가해야 합니다. 필요하지 않으면 무시됩니다. 그러나 우리가 거기에 그것을 가지고 있지 않다면 (그러나 그것이있을 것으로 예상되는 경우) - 디코더는 오류를 던질 것입니다.위의 모든 내용을 Python의 간단한 코드 줄로 요약하면 다음과 같습니다.
import base64
import json
# Assuming the token is in the token variable
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9." \
"eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ." \
"SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
# Split by dot and get middle, payload, part;
token_payload = token.split(".")[1]
# Payload is base64 encoded, let's decode it to plain string
# To make sure decoding will always work - we're adding max padding ("==")
# to payload - it will be ignored if not needed.
token_payload_decoded = str(base64.b64decode(token_payload + "=="), "utf-8")
# Payload is JSON - we can load it to dict for easy access
payload = json.loads(token_payload_decoded)
# And now we can access its' elements - e.g. name
name = payload["name"]
# Let's print it - it should show "John Doe"
print(name)
Replit(Reading JWT token without library on Replit)의 브라우저에서 실행하거나 Python 3을 사용하여 로컬로 실행할 수 있습니다.
그리고 그게 다야. 꽤 간단하죠?
그리고 추가 도구 없이도 할 수 있어서 정말 좋습니다! :-)
Reference
이 문제에 관하여(라이브러리 없이 JWT 토큰 클레임 읽기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/elwin013/reading-jwt-token-claims-without-a-library-a4l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)