Đối với dự án node.js mới mà tôi đang làm việc, tôi đang suy nghĩ về việc chuyển đổi từ cách tiếp cận phiên dựa trên cookie (ý tôi là, lưu trữ id vào kho lưu trữ khóa giá trị có chứa phiên người dùng trong trình duyệt của người dùng) đến cách tiếp cận phiên dựa trên mã thông báo (không lưu trữ khóa-giá trị) bằng cách sử dụng Mã thông báo Web JSON (jwt).
Dự án là một trò chơi sử dụng socket.io - có phiên dựa trên mã thông báo sẽ hữu ích trong trường hợp như vậy trong đó sẽ có nhiều kênh liên lạc trong một phiên duy nhất (web và socket.io)
Làm thế nào một người cung cấp mã thông báo / hiệu lực phiên từ máy chủ bằng cách sử dụng Phương pháp tiếp cận jwt?
Tôi cũng muốn hiểu những cạm bẫy / tấn công phổ biến (hoặc không phổ biến) mà tôi nên tìm ra với mô hình này. Ví dụ: nếu mô hình này dễ bị tấn công giống / khác nhau như cách tiếp cận dựa trên lưu trữ phiên / cookie.
Vì vậy, giả sử tôi có những điều sau đây (được điều chỉnh từ cái này và cái này ):
Đăng nhập cửa hàng phiên:
app.get('/login', function(request, response) {
var user = {username: request.body.username, password: request.body.password };
// Validate somehow
validate(user, function(isValid, profile) {
// Create session token
var token= createSessionToken();
// Add to a key-value database
KeyValueStore.add({token: {userid: profile.id, expiresInMinutes: 60}});
// The client should save this session token in a cookie
response.json({sessionToken: token});
});
}
Đăng nhập dựa trên mã thông báo:
var jwt = require('jsonwebtoken');
app.get('/login', function(request, response) {
var user = {username: request.body.username, password: request.body.password };
// Validate somehow
validate(user, function(isValid, profile) {
var token = jwt.sign(profile, 'My Super Secret', {expiresInMinutes: 60});
response.json({token: token});
});
}
-
Đăng xuất (hoặc không hợp lệ) cho phương pháp Lưu trữ phiên sẽ yêu cầu cập nhật cơ sở dữ liệu KeyValueStore với mã thông báo được chỉ định.
Có vẻ như một cơ chế như vậy sẽ không tồn tại trong cách tiếp cận dựa trên mã thông báo vì chính mã thông báo sẽ chứa thông tin thường tồn tại trong kho lưu trữ khóa-giá trị.
isRevoked
tùy chọn hoặc cố gắng sao chép cùng chức năng. github.com/auth0/express-jwt#revoking-tokens