micro service
- App A: login -> tạo token (sử dụng passport).
- App B: sử dụng token để lấy dữ liệu. các bác cho e hỏi là thằng App kiểm tra token hợp lệ , hết hạn như thế nào ạ.
2 CÂU TRẢ LỜI
Để kiểm tra token hợp lệ, hết hạn, App B cần thực hiện các bước sau:
- Lấy thông tin token từ người dùng. Thông tin token bao gồm:
- Mã token
- Tên người dùng
- Thời hạn token
-
Sử dụng mã token để xác thực với App A. App B có thể sử dụng API của App A để xác thực.
-
Nếu xác thực thành công, App B sẽ lấy được thông tin thời hạn token.
-
So sánh thời hạn token với thời gian hiện tại. Nếu thời gian hiện tại lớn hơn thời hạn token, thì token đã hết hạn.
Ví dụ, App A sử dụng Passport để tạo token. Token được tạo bởi hàm passport.authenticate(). Hàm này sẽ trả về một đối tượng token. Đối tượng này chứa các thông tin sau:
{
"id": "1234567890",
"token": "1234567890abcdefghijklmnopqrstuvwxzy",
"expires_in": 3600,
"user": {
"id": "1234567890",
"username": "user1",
"email": "user1@example.com"
}
}
Để xác thực token, App B có thể sử dụng hàm passport.authenticate(). Hàm này sẽ trả về một đối tượng user. Đối tượng này chứa thông tin người dùng.
{
"id": "1234567890",
"username": "user1",
"email": "user1@example.com"
}
Sau khi xác thực thành công, App B có thể lấy được thông tin thời hạn token từ đối tượng user.
const user = await passport.authenticate('jwt', {
token: token
});
const expiresIn = user.expires_in;
Nếu thời gian hiện tại lớn hơn thời hạn token, thì token đã hết hạn.
const now = new Date();
if (now > new Date(now.getTime() + expiresIn * 1000)) {
// Token đã hết hạn
}
Ngoài ra, App B cũng có thể sử dụng các thư viện của bên thứ ba để kiểm tra token hợp lệ, hết hạn. Ví dụ, thư viện jsonwebtoken cung cấp các hàm để kiểm tra token.
import jwt from 'jsonwebtoken';
const token = '1234567890abcdefghijklmnopqrstuvwxzy';
const decodedToken = jwt.decode(token);
const expiresIn = decodedToken.expires_in;
const now = new Date();
if (now > new Date(now.getTime() + expiresIn * 1000)) {
// Token đã hết hạn
}
GO GO GO!!!
@dovannam115 Trong token sao mình không truyền expire_at để đỡ phải verify tại service A ?
@Khanhtaplaptrinh rồi 2 server khác múi giờ thì sao ?
@santoruy2022 Dung timeZone?
e mới chuyển qua dùng JWT. server B dùng JWT_SECRET để giải mã token đó (giải quyết được vấn đề). SECRET của passport nằm ở đâu thế các các bác? e thấy sinh ra khá nhiều thứ nào oauth-private, oauth-public, table oauth_clients.
Authentication và authorization là một trong số các generic domain của một hệ thống. Trong microservices, người ta cũng thường tách biệt authentication và authorization ra tầng API Gateway. Khi đó, các microservices không phải xử lý authentication nữa mà chỉ cần tập trung vào giải quyết các bài toán nghiệp vụ chính của doanh nghiệp mà thôi.