Итак, в настоящее время я изучаю / создаю серверный интерфейс REST API для моего веб-приложения, используя NodeJS, ExpressJS и JWT в качестве аутентификации. Мой запрос касается наилучшей практики определения владельца токена JWT на сервере без необходимости отправлять полезную нагрузку из веб-приложения, поскольку это ограничивает использование метода GET HTTP, чего я не хочу.
Вы можете спросить, почему я хочу идентифицировать владельца токена JWT, ну и все учебные примеры, из которых я извлек уроки, все воспринимают пользователя как необходимый объект, что имеет смысл просто иметьконечная точка говорит GET / user /: userId. Однако для других пользовательских конечных точек, таких как запись в блоге, я действительно не хочу прибегать к GET / user /: userId / blog /: id и, следовательно, к рассолу, в котором я нахожусь.
Этовозможно, что я обдумываю это, и что самое простое решение - смотреть мне в глаза - перед чем я прошу прощения. Но я подумал о нескольких идеях, в том числе о той, которую я использую в настоящее время, и мне хотелось бы услышать ваше мнение об этом или есть ли лучший способ сделать это.
Сценарий:Пользователь уже вошел в систему и хотел бы просмотреть свой блог в конечной точке GET / blog /: id, но сервер должен подтвердить, что у пользователя есть доступ для просмотра этого блога
1. Передайте идентификатор пользователя в заголовок (тот, который я сейчас использую)
Это, наверное, самый простой способ сделать это. Я просто включаю идентификатор пользователя в заголовки.
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${jwtToken}`,
UserId: userId
}
Это хорошая практика для обеспечения необходимости отправки дополнительных данных внутри заголовка для всех вызовов на сервер, и что более важно, это безопасно делать?
2. Заставьте все конечные точки включать / user /: userId
Еще один простой способ, чтобы он стал GET / user /: userId / blog /: id. Хотя это нормально, я чувствую себя не в своей тарелке с решением. Но если это считается обычной практикой, то пусть будет так.
3. Кэшируйте токен против идентификатора пользователя
Это, пожалуй, «лучшее» решение, которое я могу себе представить, поскольку оно дополнительно служит еще одним уровнем аутентификации, а также легко идентифицирует владельца токена. Тем не менее, это добавляет еще один уровень сложности серверу, который при необходимости хорош, но я всегда чувствую, что чем меньше, тем лучше.
4. Временно сохраните токен в БД
По аналогии с номером 3, и, вероятно, даже проще, чем добавлять слой кэширования. Однако я не знаю, есть ли какие-либо последствия использования БД в качестве временного хранилища.
Так вот где я сейчас нахожусь. Я очень ценю ваше время и ответ. Заранее спасибо.