JWT คืออะไร? คำจำกัดความและการใช้งานในด้านความปลอดภัยบนเว็บ

การปรับปรุงครั้งล่าสุด: กันยายน 26, 2024
ผู้แต่ง: Alvaro Vico Sierra

El JSON เว็บโทเค็นหรือที่เรียกกันทั่วไปว่า จวเป็นมาตรฐานเปิดสำหรับการส่งข้อมูลอย่างปลอดภัยระหว่างบุคคลต่างๆ กำหนดไว้ภายใต้ข้อกำหนด RFC 7519 และส่วนใหญ่ใช้ในบริบทของความปลอดภัยบนเว็บเพื่อยืนยันตัวตนผู้ใช้และรับรองความถูกต้องของข้อมูล

โครงสร้างของ JWT

Un จว ประกอบด้วยสามส่วนที่เข้ารหัสใน เบส64ยูอาร์แอล, แยกตามจุด:

  • ส่วนหัว: ประกอบด้วยข้อมูลเมตาเกี่ยวกับโทเค็น เช่น ประเภทและอัลกอริทึมลายเซ็นที่ใช้ ตัวอย่างเช่น:
{"alg": "HS256", "typ": "JWT"}
  • อัตรา: ส่วนนี้ประกอบด้วยข้อเรียกร้อง ซึ่งเป็นข้อความเกี่ยวกับเอนทิตี (โดยปกติคือผู้ใช้) และเมตาดาต้าเพิ่มเติม ตัวอย่างเช่น:
  • {"sub": "1234567890", "name": "John Doe", "admin": true}
  • ลายเซ็น: ใช้เพื่อตรวจสอบความสมบูรณ์ของโทเค็นและความถูกต้องของผู้ออก ในการคำนวณลายเซ็น ส่วนหัว และ y น้ำหนักบรรทุก, มีการเชื่อมโยงและลงนามโดยใช้อัลกอริทึมเช่น HMAC SHA256.
  • ตัวอย่างเช่น ลายเซ็นถูกสร้างขึ้นจาก:

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      your-256-bit-secret)

    ประเภทของการเรียกร้องใน JWT

    การเรียกร้องหรือ การเรียกร้อง โดยทั่วไปจะแบ่งออกเป็น 3 ประเภท:

    การเรียกร้องที่ลงทะเบียน

    เป็นชุดคำกล่าวอ้างที่กำหนดไว้ล่วงหน้าซึ่งแนะนำให้ใช้ใน JWT ซึ่งประกอบด้วย:

    • สถานีอวกาศนานาชาติ: ผู้จัดทำโทเค็น
    • ด้านล่าง: เรื่องของโทเค็น
    • AUD:กลุ่มเป้าหมายของโทเค็น
    • ประสบการณ์: วันหมดอายุของโทเค็น
    • ไม่ทราบ: ระบุเวลาที่โทเค็นจะมีผลบังคับใช้

    การร้องเรียนของประชาชน

    ผู้ใช้สามารถกำหนดคำกล่าวอ้างได้ตามต้องการ แต่ต้องหลีกเลี่ยงการชนกันของชื่อ ตัวอย่างเช่น:

    • ชื่อผู้ใช้: ชื่อผู้ใช้ของบุคคลที่ผ่านการตรวจสอบความถูกต้อง
    • บทบาท: บทบาทของผู้ใช้ (ผู้ดูแลระบบ, ผู้ใช้ทั่วไป ฯลฯ)

    การเรียกร้องส่วนตัว

    ข้อเรียกร้องที่กำหนดเองถูกสร้างขึ้นเพื่อแบ่งปันข้อมูลระหว่างฝ่ายต่างๆ ในลักษณะที่ไม่รบกวนการเรียกร้องที่จดทะเบียนหรือสาธารณะ

    JWT ทำงานอย่างไรในการรักษาความปลอดภัยบนเว็บ?

    เวิร์กโฟลว์ของ จว โดยทั่วไปให้ทำตามขั้นตอนเหล่านี้:

    การรับรอง

    กระบวนการเริ่มต้นเมื่อผู้ใช้ยืนยันตัวตนสำเร็จ ซึ่งโดยปกติจะผ่านแบบฟอร์มเข้าสู่ระบบ เมื่อผู้ใช้ได้รับการยืนยันแล้ว เซิร์ฟเวอร์จะสร้าง จว ซึ่งมีข้อมูลเกี่ยวกับเซสชันของผู้ใช้

    การสร้างโทเค็น

    หลังจากการตรวจสอบสิทธิ์ เซิร์ฟเวอร์จะสร้าง จว และส่งเป็นการตอบกลับไปยังไคลเอนต์ โทเค็นนี้สามารถเก็บไว้ใน ที่จัดเก็บในเครื่อง หรือเป็นคุกกี้ในเบราว์เซอร์

    การส่งโทเค็น

    ในแต่ละคำขอที่ตามมา ไคลเอนต์จะส่ง จว ไปยังเซิร์ฟเวอร์ โดยปกติผ่านทางส่วนหัว การอนุญาต:

    Authorization: Bearer 

    การตรวจสอบโทเค็น

    เซิร์ฟเวอร์จะได้รับโทเค็นและตรวจสอบโดยใช้คีย์ลับหรือใบรับรอง หากโทเค็นถูกต้องและยังไม่หมดอายุ สิทธิ์การเข้าถึงทรัพยากรที่ได้รับการป้องกันจะได้รับอนุญาต

    ข้อดีของการใช้ JWT

    การใช้ จว ในแอปพลิเคชันเว็บมีข้อดีหลายประการ:

    ความสามารถในการปรับขนาด

    ลอส จว เซิร์ฟเวอร์เหล่านี้ทำงานแบบอัตโนมัติ หมายความว่าไม่จำเป็นต้องรักษาเซสชันผู้ใช้ไว้ในหน่วยความจำ วิธีนี้ช่วยเพิ่มความสามารถในการปรับขนาด เนื่องจากอินสแตนซ์เซิร์ฟเวอร์หลายตัวสามารถจัดการคำขอได้โดยไม่ต้องเข้าถึงฐานข้อมูลเพื่อตรวจสอบสถานะเซสชัน

    การทำงานร่วมกัน

    การเป็นมาตรฐานแบบเปิด จว สามารถทำงานร่วมกันได้ในภาษาการเขียนโปรแกรมและแพลตฟอร์มที่แตกต่างกัน ช่วยให้บูรณาการเข้ากับระบบและบริการต่างๆ ได้ง่าย

    ความปลอดภัย

    ความสามารถในการลงนาม จว ช่วยให้แน่ใจว่าเนื้อหาจะไม่ถูกเปลี่ยนแปลง และการใช้อัลกอริธึมการเข้ารหัสจะเพิ่มชั้นความปลอดภัยอีกชั้นหนึ่ง ซึ่งจะทำให้มีความลับเมื่อจำเป็น

    ข้อเสียของการใช้ JWT

    แม้จะมีข้อดี แต่ก็มีข้อเสียเมื่อนำไปปฏิบัติ จว:

    ขนาดโทเค็น

    ลอส จว อาจมีขนาดใหญ่ได้ โดยเฉพาะหากมีข้อมูลจำนวนมากอยู่ภายใน น้ำหนักบรรทุกสิ่งนี้อาจทำให้ค่าใช้จ่ายเครือข่ายเพิ่มขึ้นหากส่งไปพร้อมกับทุกคำขอ

    การหมดอายุและการเพิกถอน

    เมื่อออกแล้ว จว โทเค็นจะใช้งานได้จนกว่าจะหมดอายุ หากจำเป็นต้องเพิกถอนผู้ใช้ (เช่น หากบัญชีถูกบุกรุก) เซิร์ฟเวอร์จะต้องใช้กลไกเพิ่มเติม เช่น รายการเพิกถอน เนื่องจากโทเค็นจะยังคงใช้งานได้จนกว่าจะหมดอายุ

    การจัดการคีย์

    ความปลอดภัยของ จว ขึ้นอยู่กับความแข็งแกร่งของคีย์ที่ใช้ลงนามโทเค็น การรักษาคีย์นี้ให้ปลอดภัยและหมุนเวียนเป็นระยะเป็นสิ่งสำคัญต่อความปลอดภัยของแอปพลิเคชัน

    การใช้งานทั่วไปของ JWT

    ลอส จว ใช้ในแอปพลิเคชันและบริบทที่หลากหลาย รวมถึง:

    การตรวจสอบสิทธิ์ API

    ในแอปพลิเคชันที่ใช้ RESTful API จว มักใช้เพื่อยืนยันคำขอต่างๆ ช่วยให้นักพัฒนา API สามารถสร้างสถาปัตยกรรมที่ปลอดภัยและใช้งานง่าย

    การตรวจสอบสิทธิ์ระหว่างไมโครเซอร์วิส

    ในสถาปัตยกรรมไมโครเซอร์วิส จว ช่วยอำนวยความสะดวกในการตรวจสอบสิทธิ์ระหว่างบริการโดยให้วิธีง่ายๆ ในการตรวจสอบผู้ใช้โดยไม่จำเป็นต้องแชร์เซสชันระหว่างบริการ

    SSO (การลงชื่อเพียงครั้งเดียว)

    การดำเนินงานของ จว สามารถอำนวยความสะดวกในการนำโซลูชันไปใช้งาน สปส.ช่วยให้ผู้ใช้สามารถตรวจสอบสิทธิ์ได้เพียงครั้งเดียวและเข้าถึงแอพพลิเคชั่นหลาย ๆ ตัวโดยไม่ต้องเข้าสู่ระบบอีกครั้ง

    การแบ่งปันข้อมูลที่ปลอดภัย

    ลอส จว นอกจากนี้ยังมีประโยชน์ในการแบ่งปันข้อมูลระหว่างฝ่ายต่างๆ เพื่อให้มั่นใจถึงความสมบูรณ์และความถูกต้องของข้อมูลที่ส่งออก

    การควบคุมการเข้าถึง

    ลอส จว พวกเขาอนุญาตให้มีการควบคุมการเข้าถึงแบบละเอียด เนื่องจากสามารถรวมข้อมูลเกี่ยวกับบทบาทและการอนุญาตไว้ในโทเค็นได้โดยตรง

    การนำ JWT ไปใช้ในโครงการ

    การสร้าง JWT

    เพื่อสร้าง จวคุณสามารถใช้งานไลบรารีต่างๆ ที่มีให้บริการในหลายภาษา เช่น JavaScript, หลาม y ชวา. ตัวอย่างใน Node.js การใช้ห้องสมุด jsonwebtoken มันเป็น:

    const jwt = require('jsonwebtoken');
    const token = jwt.sign({ id: user.id }, 'your-256-bit-secret', { expiresIn: '1h' });

    การตรวจสอบ JWT

    การตรวจสอบของ จว ทำได้ในลักษณะเดียวกันโดยใช้ไลบรารีเดียวกัน:

    jwt.verify(token, 'your-256-bit-secret', function(err, decoded) {
      if (err) {
        return console.log('Token inválido');
      }
      console.log(decoded); // { id: 123, i Ss: 'your-issuer', ... }
    });

    การจัดการการหมดอายุของโทเค็น

    ในการจัดการกับการหมดอายุของโทเค็น จะต้องตรวจสอบเวลาหมดอายุ (การเรียกร้อง) ประสบการณ์) ใน น้ำหนักบรรทุก ก่อนที่จะให้สิทธิ์เข้าถึงทรัพยากรที่ได้รับการป้องกัน หากโทเค็นหมดอายุ ผู้ใช้ควรได้รับการเปลี่ยนเส้นทางเพื่อเข้าสู่ระบบอีกครั้งและรับโทเค็นใหม่

    การใช้มิดเดิลแวร์

    ในแอปพลิเคชันมากมาย โดยเฉพาะอย่างยิ่งในบริบทของ Node.js กับ รวดเร็ว มิดเดิลแวร์ใช้เพื่อจัดการการตรวจสอบแบบรวมศูนย์ จวนี่คือตัวอย่างพื้นฐาน:

    const express = require('express');
    const jwt = require('jsonwebtoken');
    const app = express();

    const checkToken = (req, res, next) => {
    const token = req.headers['authorization']?.split(' ')[1];
    if (!token) return res.sendStatus(401); // No autorizado

    jwt.verify(token, 'your-256-bit-secret', (err, decoded) => {
    if (err) return res.sendStatus(403); // Prohibido
    req.user = decoded; // Guardar información del usuario en el request
    next(); // Continuar a la siguiente middleware
    });
    };

    app.get('/protected', checkToken, (req, res) => {
    res.send('Este es un recurso protegido.');
    });

    El JSON เว็บโทเค็น เป็นเครื่องมืออันทรงพลังสำหรับการจัดการการพิสูจน์ตัวตนและการอนุญาตในแอปพลิเคชันบนเว็บ โครงสร้างที่เรียบง่ายและความสามารถในการตรวจสอบและรับรองความถูกต้องช่วยให้การนำระบบที่ปลอดภัย ปรับขนาดได้ และทำงานร่วมกันได้สะดวกยิ่งขึ้น อย่างไรก็ตาม จำเป็นต้องพิจารณาแนวทางปฏิบัติที่ดีที่สุดและการจัดการความปลอดภัยที่เหมาะสมเพื่อเพิ่มประสิทธิภาพสูงสุด