Как сохранить и отправить токен JWT из внешнего интерфейса

Я использую JWT в своем приложении node.js. С токеном все работает нормально. Я могу получить токен, когда войду в систему.

Вот как я проверяю авторизацию пользователя:

const jwt = require('jsonwebtoken')

try{
    const token = req.headers.authorization
    const decoded = jwt.verify(token, 'secret')
    req.userData = decoded
    next()
}
catch(err){
    return res.send("Auth error")
}

Я могу получить доступ к защищенным маршрутам, если я изменю значение token с помощью этого токена, который у меня есть после входа в систему.

Но я хочу сохранить токен (на стороне пользователя???), и каждый раз, когда пользователь пытается получить доступ к защищенным маршрутам (из внешнего интерфейса), отправлять токен как req.headers.authorization, чтобы токен можно было проверить, и пользователь мог получить доступ маршрут.

Итак, как сохранить и позже отправить токен, который генерируется после входа пользователя в систему каждый раз, когда на защищенные маршруты ссылаются?

Спасибо.

(Я не использую какие-либо интерфейсные рамки javascript)


person Dobie    schedule 21.09.2020    source источник


Ответы (2)


Если это токен для аутентификации, вы можете использовать файл cookie httpOnly для предотвращения XSS-атак, которые представляют риск при использовании локального хранилища.

Чтобы сохранить JWT в файле cookie в экспресс-режиме:

const accessToken = jwt.sign(); 

return res
    .status(201)
    .cookie("accessToken", accessToken, {
        httpOnly: true,
        maxAge: (1000*60*5), // 5m
        secure: true,
        signed: true
    })
    .end();

При получении из запросов:

const { accessToken } = req.signedCookies;

Внутри вашего app.js:

const express = require("express");
const cookieParser = require("cookie-parser");
const app = express();

app.use(cookieParser("secret"));

При использовании файлов cookie httpOnly ваши запросы автоматически отправляют файл cookie вместе с запросом (только если файл cookie принадлежит тому же домену). Просто убедитесь, что ваш CORS и http-клиент правильно настроены для обработки файла cookie.

person rantao    schedule 21.09.2020

Общий подход к сохранению в локальном хранилище. Просто имейте в виду размер локального хранилища и другие ограничения в разных браузерах.

person Anatoly    schedule 21.09.2020