0

JWT Implementation: A Step-by-Step Guide for Web Applications

Mã thông báo Web JSON (JWT) là một cách phổ biến để bảo mật các ứng dụng web. Trong bài viết này, chúng tôi sẽ cung cấp hướng dẫn từng bước để triển khai JWT trong ứng dụng web, bao gồm quy trình phát hành, xác minh và sử dụng JWT.

Choose Your JWT Library

Bước đầu tiên trong việc triển khai JWT trong ứng dụng web của bạn là chọn một thư viện JWT. Có rất nhiều thư viện dành cho các ngôn ngữ lập trình khác nhau, vì vậy hãy chọn ngôn ngữ phù hợp nhất với nhu cầu của bạn.

Một số thư viện JWT phổ biến bao gồm:

  • JSON Web Token (JWT) - a library for Node.js
  • PyJWT - a library for Python
  • java-jwt - a library for Java
  • jwt-go - a library for Go
  • jwt - a library for ruby

Create a Secret Key

Trước khi bạn có thể bắt đầu phát hành JWT, bạn cần tạo một khóa bí mật. Khóa bí mật được sử dụng để ký và xác minh JWT, vì vậy điều quan trọng là phải giữ an toàn cho nó.

Bạn có thể tạo khóa bí mật bằng công cụ như OpenSSL hoặc bằng trình tạo chuỗi ngẫu nhiên. Đảm bảo lưu trữ khóa bí mật một cách an toàn vì bất kỳ ai có quyền truy cập vào khóa đó đều có thể tạo và xác minh JWT.

require 'openssl'
rsa_key = OpenSSL::PKey::RSA.new(2048)

private_key = rsa_key.to_pem(cipher,'password')

Issuing a JWT

Để phát hành JWT, bạn cần tạo một tải trọng chứa các xác nhận quyền sở hữu mà bạn muốn đưa vào mã thông báo. Xác nhận quyền sở hữu là các cặp khóa-giá trị cung cấp thông tin về mã thông báo, chẳng hạn như ID người dùng hoặc thời gian hết hạn.

Khi bạn đã tạo tải trọng, bạn có thể sử dụng thư viện JWT để ký tải trọng bằng khóa bí mật. Mã thông báo kết quả có thể được trả lại cho khách hàng, người sau đó có thể đưa nó vào các yêu cầu tiếp theo.

Đây là một ví dụ về việc phát hành JWT bằng thư viện JWT của Node.js:

const jwt = require('jsonwebtoken');
const secretKey = 'mysecretkey';

const payload = {
  userId: '12345',
  username: 'johndoe',
  isAdmin: false
};

const token = jwt.sign(payload, secretKey, { expiresIn: '1h' });

Mã này tạo một tải trọng chứa ID người dùng, tên người dùng và liệu người dùng có phải là quản trị viên hay không. Sau đó, nó sử dụng phương thức jwt.sign() để ký tải trọng bằng khóa bí mật và đặt thời gian hết hạn là 1 giờ. Mã thông báo kết quả được lưu trữ trong biến mã thông báo và có thể được trả lại cho khách hàng.

Verifying a JWT

Để xác minh JWT, bạn cần trích xuất tải trọng từ mã thông báo và xác minh chữ ký bằng khóa bí mật. Bạn cũng cần kiểm tra thời gian hết hạn của mã thông báo và bất kỳ xác nhận quyền sở hữu nào khác mà bạn đã đưa vào tải trọng.

Đây là một ví dụ về việc xác minh JWT bằng thư viện JWT của Node.js:

const jwt = require('jsonwebtoken');
const secretKey = 'mysecretkey';

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NSIsInVzZXJuYW1lIjoiam9obmRvZSIsImlzQWRtaW4iOmZhbHNlfQ.xzcPXGxOnxR50REBQWZ9v_ggB-3xbE3abI3Sj6GztUc';

try {
  const decodedToken = jwt.verify(token, secretKey);
  console.log(decodedToken);
} catch (error) {
  console.log(error.message);
}

Mã này trích xuất mã thông báo từ một biến và sử dụng phương thức jwt.verify() để xác minh chữ ký của mã thông báo và kiểm tra thời gian hết hạn. Nếu mã thông báo hợp lệ, tải trọng đã giải mã sẽ được trả về, có thể được sử dụng để xác thực.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.