สิ่งสำคัญ: ไลบรารีนี้ไม่ได้ตรวจสอบโทเค็น JWT ที่มีรูปแบบถูกต้องสามารถถอดรหัสได้ คุณควรตรวจสอบโทเค็นในตรรกะฝั่งเซิร์ฟเวอร์ของคุณโดยใช้บางอย่างเช่น express-jwt, koa-jwt, Microsoft.AspNetCore.Authentication.JwtBearer เป็นต้น
เอกสาร - การเริ่มต้น - คำติชม
ติดตั้งด้วย NPM หรือเส้นด้าย
รัน npm install jwt-decode
หรือ yarn add jwt-decode
เพื่อติดตั้งไลบรารี
import { jwtDecode } from "jwt-decode" ;
const token = "eyJ0eXAiO.../// jwt token" ;
const decoded = jwtDecode ( token ) ;
console . log ( decoded ) ;
/* prints:
* {
* foo: "bar",
* exp: 1393286893,
* iat: 1393268893
* }
*/
// decode header by passing in options (useful for when you need `kid` to verify a JWT):
const decodedHeader = jwtDecode ( token , { header : true } ) ;
console . log ( decodedHeader ) ;
/* prints:
* {
* typ: "JWT",
* alg: "HS256"
* }
*/
หมายเหตุ: โทเค็นปลอมหรือผิดรูปแบบจะทำให้เกิดข้อผิดพลาด InvalidTokenError
ดูด้านล่างสำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดเฉพาะ
ไลบรารีนี้อาศัย atob()
ซึ่งเป็นฟังก์ชันสากลที่มีอยู่ในเบราว์เซอร์สมัยใหม่ทั้งหมด รวมถึงทุกสภาพแวดล้อมของโหนดที่รองรับ
ในการใช้ jwt-decode
ในสภาพแวดล้อมที่ไม่สามารถเข้าถึง atob()
(เช่น React Native) ตรวจสอบให้แน่ใจว่าได้จัดเตรียม polyfill ที่เกี่ยวข้องในแอปพลิเคชันของคุณโดยใช้ core-js/stable/atob
:
import "core-js/stable/atob" ;
หรือคุณสามารถใช้ base-64
และ polyfill global.atob
ด้วยตัวเอง:
import { decode } from "base-64" ;
global . atob = decode ;
ไลบรารีนี้ใช้งานได้กับโทเค็นเว็บ JSON ที่ถูกต้อง รูปแบบพื้นฐานของโทเค็นเหล่านี้คือ
[part1].[part2].[part3]
ทุกส่วนควรจะเป็น json ที่เข้ารหัส base64 (url) ที่ถูกต้อง ขึ้นอยู่กับตัวเลือก { header: <option> }
มันจะถอดรหัสส่วนที่ 1 (เฉพาะในกรณีที่ระบุ header: true) หรือส่วนที่ 2 (ค่าเริ่มต้น)
การไม่ปฏิบัติตามรูปแบบจะส่งผลให้เกิด InvalidTokenError
พร้อมข้อความใดข้อความหนึ่งต่อไปนี้:
Invalid token specified: must be a string
=> โทเค็นที่ส่งไม่ใช่สตริง ไลบรารีนี้ใช้งานได้กับสตริงเท่านั้นInvalid token specified: missing part #
=> นี่อาจหมายความว่าคุณไม่มีจุด ( .
) ในโทเค็นInvalid token specified: invalid base64 for part #
=> ส่วนไม่สามารถถอดรหัส base64 ได้ (ข้อความควรมีข้อผิดพลาดที่ตัวถอดรหัส base64 ให้ไว้)Invalid token specified: invalid json for part #
=> ส่วนถูกถอดรหัส base64 อย่างถูกต้อง อย่างไรก็ตาม ค่าที่ถอดรหัสไม่ใช่ JSON ที่ถูกต้อง (ข้อความควรมีข้อผิดพลาดที่ตัวแยกวิเคราะห์ JSON ให้ไว้) ประเภทการส่งคืนของฟังก์ชัน jwtDecode
ถูกกำหนดโดยคุณสมบัติ header
ของอ็อบเจ็กต์ที่ส่งผ่านเป็นอาร์กิวเมนต์ที่สอง หากละเว้น (หรือตั้งค่าเป็นเท็จ) ระบบจะใช้ JwtPayload
เมื่อเป็นจริงจะใช้ JwtHeader
หากจำเป็น คุณสามารถระบุประเภทการส่งคืนที่คาดหวังได้โดยการส่งอาร์กิวเมนต์ประเภทไปยังฟังก์ชัน jwtDecode
คุณสามารถขยายทั้ง JwtHeader
และ JwtPayload
เพื่อรวมการอ้างสิทธิ์หรือคุณสมบัติที่ไม่ได้มาตรฐาน
import { jwtDecode } from "jwt-decode" ;
const token = "eyJhsw5c" ;
const decoded = jwtDecode < JwtPayload > ( token ) ; // Returns with the JwtPayload type
const { jwtDecode } = require ( 'jwt-decode' ) ;
...
คัดลอกไฟล์ jwt-decode.js
จากรูทของโฟลเดอร์ build/esm
ไปยังโปรเจ็กต์ของคุณ จากนั้นนำเข้า jwtDecode
จากไฟล์นั้นภายในแท็กสคริปต์ที่ทำเครื่องหมายด้วย type="module"
:
< script type =" module " >
import { jwtDecode } from "/path/to/jwt-decode.js" ;
const token = "eyJhsw5c" ;
const decoded = jwtDecode ( token ) ;
</ script >
เราขอขอบคุณข้อเสนอแนะและการมีส่วนร่วมใน repo นี้! ก่อนที่คุณจะเริ่มต้น โปรดดูสิ่งต่อไปนี้:
หากต้องการให้ข้อเสนอแนะหรือรายงานข้อบกพร่อง โปรดแจ้งปัญหาในตัวติดตามปัญหาของเรา
โปรดอย่ารายงานช่องโหว่ด้านความปลอดภัยในตัวติดตามปัญหา GitHub สาธารณะ โปรแกรมการเปิดเผยข้อมูลอย่างมีความรับผิดชอบจะให้รายละเอียดขั้นตอนในการเปิดเผยประเด็นด้านความปลอดภัย
Auth0 เป็นแพลตฟอร์มการรับรองความถูกต้องและการอนุญาตที่ใช้งานง่ายและปรับเปลี่ยนได้ หากต้องการเรียนรู้เพิ่มเติมในการชำระเงิน ทำไมต้อง Auth0?
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม