Xác thực nodejs jwt

JSON Web Token (JWT) là một chuẩn mở (RFC 7519) được định nghĩa là một cách thu gọn và khép kín để truyền một cách an toàn thông tin giữa các bên dưới dạng đối tượng JSON. Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứa các chữ số. JWT có thể được ký bằng thuật toán bí mật (với thuật toán HMAC) hoặc khóa công khai/riêng tư sử dụng mã hóa RSA

Một ví dụ về JWT Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJleHAiOjEzODY4OTkxMzEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU5IiwiaWF0IjoxMzg2ODk4OTUxfQ.
uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_IWuA5MaMo

Thoạt nhìn phức tạp là thế nhưng nếu hiểu, cấu trúc của JWT chỉ đơn giản như sau

.
.

Nói một cách khác, JWT là sự kết hợp (bằng dấu. ) Tiêu đề đối tượng dưới định dạng JSON được mã hóa base64, đối tượng tải trọng dưới định dạng JSON được mã hóa base64 và một Chữ ký cho URI cũng được mã hóa nốt base64

Giải thích thêm về 3 thành phần của JWT

tiêu đề

Header bao gồm hai phần chính. loại mã thông báo (mặc định là JWT – Thông báo này cho biết đây là Mã thông báo JWT) và thuật toán được sử dụng để mã hóa (HMAC SHA256 – HS256 hoặc RSA)

{
  "alg": "HS256",
  "typ": "JWT"
}

Khối hàng

Tải trọng chứa các khiếu nại. Khiếu nại là một biểu thức về một thực thể (người dùng không giới hạn) và một số siêu dữ liệu phụ trợ. Có 3 loại yêu cầu thường gặp trong Payload. tuyên bố dành riêng, công khai và riêng tư

Yêu cầu bảo lưu. This is a number metadata was known before, in that a number metadata is started, number but back should be follow to JWT hợp lệ và đầy đủ thông tin. iss (nhà phát hành), iat (thời điểm phát hành) exp (thời gian hết hạn), sub (chủ đề), aud (đối tượng), jti (Số nhận dạng duy nhất cho JWT, Có thể được sử dụng để ngăn JWT phát lại. Điều này hữu ích cho mã thông báo sử dụng một lần. ) … Ví dụ

{
    "iss": "jira:1314039",
    "iat": 1300819370,
    "exp": 1300819380,
    "qsh": "8063ff4ca1e41df7bc90c8ab6d0f6207d491cf6dad7c66ea797b4614b71922e9",
    "sub": "batman",
    "context": {
        "user": {
            "userKey": "batman",
            "username": "bwayne",
            "displayName": "Bruce Wayne"
        }
    }
}
{
  "iss": "scotch.io",
  "exp": 1300819380,
  "name": "Chris Sevilleja",
  "admin": true
}

Yêu cầu công khai – Yêu cầu được cộng đồng công nhận và sử dụng rộng rãi

Khiếu nại riêng – Khiếu nại có định nghĩa riêng (không trùng với Khiếu nại dành riêng và Khiếu nại công khai), được tạo ra để chia sẻ thông tin giữa 2 bên thuận lợi và thống nhất trước đó

Chữ ký

Chữ ký Chữ ký trong JWT là một chuỗi được mã hóa bởi tiêu đề, tải trọng cùng với một chuỗi bí mật theo nguyên tắc sau

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

Do bản thân Chữ ký đã bao gồm cả tiêu đề và trọng tải nên Chữ ký có thể được sử dụng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải

Specify Nodejs with JWT

Cài đặt gói JWT

jsonwebtoken là gói Node phát triển dựa trên 

.
.

5

Tạo mô hình người dùng

Trong thư mục api/models folder, tạo một tệp 

.
.

6. Nhưng các bạn đã biết, MongoDB cho phép chúng ta tạo một lược đồ và là nơi chúng ta có thể tạo tài liệu. Chúng ta sẽ sử dụng nó để tạo người dùng trực tiếp trong Tài liệu người dùng. Trong bài viết này chúng tôi sử dụng gói 
.
.

7 của nodejs để tạo lược đồ với các thuộc tính như sau

  • Họ và tên
  • địa chỉ email
  • hộ chiếu
  • created (ngày tạo)
'use strict';
var mongoose = require('mongoose'),
  bcrypt = require('bcrypt'),
  Schema = mongoose.Schema;
//User Schema
var UserSchema = new Schema({
  fullName: {
    type: String,
    trim: true,
    required: true
  },
  email: {
    type: String,
    unique: true,
    lowercase: true,
    trim: true,
    required: true
  },
  hash_password: {
    type: String,
    required: true
  },
  created: {
    type: Date,
    default: Date.now
  }
});
UserSchema.methods.comparePassword = function(password) {
  return bcrypt.compareSync(password, this.hash_password);
};
mongoose.model('User', UserSchema);

Tạo phương thức cho người dùng (đăng nhập, đăng ký và yêu cầu đăng nhập)

Trong thư mục api/bộ điều khiển tạo tệp 

.
.

8 Trong tệp 
.
.

9 chúng ta tạo xuất 3 thương thức khác nhau với NodeJS

.
.

2

Trong phương thức đăng ký, chúng tôi tạo mô hình người dùng cá thể với Lược đồ người dùng và lưu trong MongoDB

.
.

3

Lưu ý. Mật khẩu lưu xuống cơ sở dữ liệu phải bcrypt bằng cách sử dụng gói Bcrypt của nodejs

Trong phương thức sign_in chúng ta thực hiện hoạt động đăng nhập. Đầu tiên, chúng ta kiểm tra xem người dùng đó có tồn tại trong cơ sở dữ liệu hay không thông qua email (chính). Nếu chúng ta kiểm tra mật khẩu mới theo phương thức

{
  "alg": "HS256",
  "typ": "JWT"
}
0 trong người dùng mô hình người dùng. Nếu trả lời thành công json với các tham số email, fullName, id (các tham số này đã được mã hóa khi truyền đến client). Nếu không khớp thì phản hồi trả về lỗi cho khách hàng với NodeJS

.
.

5

Trong phương pháp kết thúc 

{
  "alg": "HS256",
  "typ": "JWT"
}
1 phần mềm trung gian kiểm tra người dùng đã đăng nhập hay chưa. Phương thức này sẽ chạy đầu tiên thành công 
{
  "alg": "HS256",
  "typ": "JWT"
}
2 sẽ chuyển hướng đến các hoạt động tiếp theo

.
.

0

Tạo các tuyến người dùng NodeJS

Trong thư mục api/routes tạo tệp 

{
  "alg": "HS256",
  "typ": "JWT"
}
3. Đây là bộ định tuyến cho người dùng đăng ký, đăng nhập vào đăng nhập để cập nhật trên ứng dụng web của chúng tôi

.
.

1

Đang cập nhật máy chủ. tệp js Nodejs

Chúng ta tạo tệp 

{
  "alg": "HS256",
  "typ": "JWT"
}
4. Tệp này chúng ta tạo Người dùng ngay lập tức và thiết lập phần mềm trung gian cho máy chủ cấp tốc để kiểm tra trạng thái của người dùng

.
.

2

Sau đó chúng ta tạo phần mềm trung gian cho express, phải chắc chắn rằng phần mềm trung gian này chạy đầu tiên

.
.

3

Như vậy chúng ta đã tạo xong server, model, controller. Bây giờ chúng ta khởi tạo máy chủ và kết hợp với người đưa thư để kiểm tra API chúng ta viết ra

.
.

4

Đây là những thứ tự hình ảnh mà chúng tôi kiểm tra với người đưa thư

Xác thực nodejs jwt

Xác thực nodejs jwt
Xác thực nodejs jwt

Kết luận

Như vậy chúng ta đã hiểu JWT là gì ? . Mong bạn có thể áp dụng vào project, app của bản thân