Для нового проекту node.js, над яким я працюю, я думаю про перехід від підходу до сеансу на основі файлів cookie (маючи на увазі, зберігання ідентифікатора в сховищі ключових значень, що містить сеанси користувача в браузері користувача) до підходу сеансу на основі лексеми (не зберігається ключ-значення) за допомогою веб-жетонів JSON (jwt).
Проект - це гра, яка використовує socket.io - проведення сеансу на основі лексеми було б корисно в такому сценарії, коли в одному сеансі буде кілька каналів зв'язку (web і socket.io)
Як можна забезпечити вимкнення маркера / сеансу з сервера за допомогою jwt-підходу?
Я також хотів зрозуміти, на які загальні (або нечасті) підводні камені / напади я повинен звертати увагу при такій парадигмі. Наприклад, якщо ця парадигма вразлива для тих же / різних видів атак, що і підхід сеансу зберігання / cookie.
Отже, скажіть, у мене є таке (адаптоване з цього і цього ):
Вхід у сесійний магазин:
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});
});
}
Логін на основі маркера:
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});
});
}
-
Вихід (або визнання недійсним) для підходу до магазину сеансів вимагатиме оновлення бази даних KeyValueStore із заданим маркером.
Схоже, такий механізм не існував би в підході, що базується на лексемах, оскільки сам маркер міститиме інформацію, яка зазвичай існує у сховищі ключових значень.
isRevoked
можливістю або спробувати повторити ту саму функціональність. github.com/auth0/express-jwt#revoked-tokens