2016-10-10 8 views
0

У меня довольно простая настройка API в стеке MEAN с использованием PassportJS. У меня нет проблем с настройкой маршрутов без безопасности (захват общих данных) и с помощью аутентификации пользователя (защищенная информация). Тем не менее, я не могу найти лучшие практики для предоставленного пользовательского доступа.Как ограничить API REST конкретным контентом

Например: /api/users /: id - это маршрут, требующий аутентификации. Таким образом, вы никогда не сможете получить информацию о пользователе без токена доступа.

Однако, как только у меня есть токен, я могу просто отправить его с запросом и другим идентификатором ELSE, чтобы получить доступ к их контенту, а не к его собственному. Хотя, id - это долгие беспорядочные вещи, если кто-то, кто хочет получить идентификатор человека из системы, им нужен только собственный пароль для доступа к этим данным.

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

Содержит ли Паспорт это авто-магическое, и я пропустил эту часть?

Спасибо, Wayne

+0

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

ответ

2

У вас уже есть аутентификации поставить на место, так что вы теперь должны реализовать это разрешение.

Аутентификация: Проверка идентичности как истинные или ложные, как правило, используется для проверки того, что пользователь, который он/она говорит, что они есть. Чаще всего достигается за счет комбинации имени пользователя/пароля, но тот же принцип применим и к другим формам аутентификации, как секретные вопросы, тайные связи, био-метрической идентификации и т.д.

Авторизация Указание, какие ресурсы пользователь (с с учетом идентичности).

(источник: Auth0 Identity Glossary)

Если система авторизации разработана правильно маркер доступа представлены для того, чтобы быть предоставлен первоначальный доступ к /api/users/:id конечной точке позволит вам узнать, какой пользователь звонит приложение так, что теперь вам нужно выполнить бизнес-правила, которые определяют, какие данные могут получить пользователь на каждой отдельной конечной точке.

Для случая /api/users/:id, если вы хотите, чтобы пользователям разрешалось только доступ к своим данным, правило может быть таким же простым, как проверка того, что идентификатор пользователя, запрошенный на маршруте API, соответствует идентификатору пользователя, связанному с токеном доступа. Учитывая, что токен доступа должен быть реализован таким образом, что его нельзя подделать, вы гарантируете, что только правильному пользователю предоставляется доступ к данным.

0

кажется, что вам не хватает проверку апи на USERID

для, например, у вас есть маршрут, такой как /api/:userId/data/:dataId, и вы хотите, чтобы только пользователи, которым разрешен доступ к этому элементу данных, могут это сделать. Тогда вам нужно будет проверить, что userId, указанный в вашем токене аутентификации, равен так же, какuserId по маршруту авиалинии!