Давайте рассмотрим этот случай использования:API desing - Можно ли извлекать данные пользователя из токена аутентификации?
1) Я называю мой API для входа в конечную точку с именем пользователя и паролем, и получить мой Auth маркер, который я добавляю к каждому последовательному запросу в заголовок как Authorization: Bearer <token>
.
2) Я вызываю /current-user
конечную точку без параметров, только с заголовком авторизации. Сервер разрешает пользователю использовать токен и получает идентификатор пользователя из этого токена. Затем он находит пользователя по id в базе данных и возвращает его данные.
Вопрос в том, не является ли этот подход небезопасным. Мне интересно, что, если я был злоумышленником и вызывал конечную точку /current-user
с использованием случайно генерируемых токенов. Как только я иногда сопоставлял реальный токен, сервер возвращал мне другие данные пользователя.
Не нужно ли хранить идентификатор пользователя на клиенте вместе с токеном и запросами на вызовы с использованием обоих? Например. /user?id=<stored user id>
с заголовком авторизации и избавиться от конечной точки /current-user
? После этого какой-то ACL на сервере определит, использовал ли токен доступ к пользователю с переданным идентификатором пользователя.
(Я также нашел, что есть JWT лексемы, но я вижу ту же проблему там. Как злоумышленником я каким-то образом удалось угадать маркер и сервер другого пользователя будет возвращать мне свои данные)
Хм Хм Я понимаю. Поэтому я в основном делаю токен достаточно долго. BTW: Это не будет 'n + m', но больше, потому что он должен угадать комбинацию, я думаю (?) – simPod