лучшие практики для определения пользователя или администратора от остальных API - PullRequest
0 голосов
/ 29 января 2020

Я создаю REST API для обслуживания внешнего интерфейса, но я не совсем уверен в некоторых моментах и ​​надеюсь, что кто-то сможет пролить свет на передовые практики для этого подхода.

API Flask, и я использую JWT. Поэтому, когда пользователь правильно аутентифицируется (передает правильное имя пользователя / пароль md5), я возвращаю JWT. Я также сохраняю JWT в базе данных для имени пользователя, чтобы гарантировать, что в каждый момент времени для каждого пользователя существует только один JWT. Даже если он входит в систему с другого P C, я создал процедуру для внесения в черный список текущего токена.

Что мне неясно, так это то, как работает интерфейс (например, Angular) , может определить, является ли пользователь администратором или обычным пользователем. Должен ли я вернуться назад (например, 0 или 1), чтобы клиент знал, что нужно скрыть определенные навигационные ссылки? Если вы сохраните что-то в кулинаре ie, пользователь все равно сможет изменить это значение и получить доступ к административным ссылкам, так что, возможно, именно в этом я и запутался.

Кроме того, как на фронте обрабатывать проверку, если пользователь был отозван? Допустим, он вошел в систему, токен был отозван, и он щелкнул ссылку другого пользователя. Должны ли мы смотреть на ответ остальных, чтобы определить, является ли он действительным? Например, если токен истекает, мы возвращаем «Token Revoked»

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 января 2020

JWT предлагает решение для всего, что вы сказали.

Внутри токена JWT вы можете написать все, что захотите, имя пользователя, срок действия токена, роли и т. Д. c. В NPM есть библиотеки, которые вы можете добавить в свой проект и использовать их для чтения заявок на токены.

Другой способ - создать API, который будет предоставлять дополнительную информацию о текущем запросе. Например, после получения токена в Angular вы вызываете API с токеном, и сервер сообщает вам о ваших разрешениях, времени истечения и т. Д. c.

Кроме того, на внешнем интерфейсе Как вы справляетесь с проверкой, был ли пользователь отозван?

Один из вариантов - написать перехватчик HTTP и отслеживать код состояния ответа сервера. Если сервер отвечает 401, это означает, что вы не прошли проверку подлинности, и вы либо не прикрепили токен, либо, если вы это сделали, срок его действия истек. Существует также два неофициальных кода состояния HTTP: 498 для недействительного токена и 499 для требуемого токена, которые вы можете использовать в своем бэкэнде.

Другой вариант - отслеживать время истечения токена, которое вы должны получить с сервера. Опять же, HTTP-перехватчик выполнит вычисления и проверит, действителен ли текущий токен.

1 голос
/ 29 января 2020

Обычно вы загружаете профиль пользователя (всю информацию, которую вы не сохраняете в JWT) при загрузке страницы. Если вы создаете одностраничное приложение , это произойдет один раз. Эти данные будут содержать информацию о пользователе и его разрешениях. Имейте в виду, что все, что возвращается в Javascript, может быть изменено и никогда не должно быть доверено вашему бэкэнду. Вот почему важно проверить ваш пользовательский интерфейсный пользовательский интерфейс и серверную часть.

Что касается проблемы с маркером отзыва, еще раз, задача серверной части - проверить это. Ваш интерфейс может иметь промежуточное программное обеспечение, которое прослушивает неверный ответ токена и делает что-то соответственно. На вашем токене также есть дата окончания срока действия, я не люблю ее использовать, но она есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...