PHP / REST - Как мне реализовать основанный на ролях доступ моего API? - PullRequest
2 голосов
/ 13 апреля 2019

Я запустил проект PHP (Инструмент отслеживания элементов управления проектами) с использованием подхода, ориентированного на API, и неплохо начал.

Я создал 2 GET методы, которые я до сих пор хочу ограничить, но не знаю, с чего начать.

В контексте моей базы данных

  • Project - это контейнер, который содержит различные элементы действий.
  • Actionitems назначены на user.

  • Users существует в базе данных.

  • Roles как назначено пользователю. (User, Admin, Super)


  • Пользователь может обновлять только свой элемент

  • Администратор имел право создавать и обновлять

  • Super имеет полные права администратора


Мой вопрос: С чего начать в PHP, чтобы разрешить только доступ к API через соответствующих пользователей, либо через API входа в систему, либо некоторые другие средства? Любая помощь, с которой я могу начать, поможет мне.

Для начала я успешно создал конечную точку для доступа к ресурсу доступа (actionitems), используя строку JSON для проверки ответа.

Существующие конечные точки, которые я хочу ограничить

GET /api/actionitems/

С общей структурой для доступа к определенным ресурсам в таблице следующим образом:

GET /api/actionitems/4

Обратите внимание, что к дополнительным конечным точкам API следует обращаться следующим образом

каждый маршрут до 3 жетонов маршрута (после / api /)

GET /api/users/123/actionitems   (get all actionitems for user 123)


GET /api/users/123/actionitems?<more-filers> applies further filtering

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Вам необходимо обработать аутентификацию и авторизацию для ваших API.

Это очень простые шаги для понимания решения:

  • Клиент вызывает API входа в систему, используя учетные данные пользователя (имя пользователя, пароль).
  • Сервер проверяет подлинность учетных данных пользователя и генерирует токен.
  • Сервер сохраняет этот токен в базе данных против аутентифицированного пользователяid и отвечает клиенту.
  • Сервер уже имеет права роли авторизации для доступа к различным API, связанным с этим аутентифицированным пользователем в базе данных.
  • Клиент вызывает API ресурсов с использованием токена, предоставленного API входа в систему.
  • Сервер проверяет токен в базе данных и выбирает права пользователя и роли пользователя по этому токену для авторизации.
  • API ресурсов авторизует и предоставляет необходимые данные или выполняет действия в соответствии с аутентифицированными правами роли пользователя.

Существует несколько способов добиться этого стандартным способом:

1 голос
/ 13 апреля 2019

Вы, вероятно, хотите посмотреть на токены JWT https://jwt.io/

Вот краткая информация

  • API с токеном не имеет состояния, вы должны отправлять токен при каждом запросе, обычно в заголовке авторизации, токен может содержать полезную нагрузку с некоторыми данными, такими как идентификатор пользователя, время создания и истечения срока действия.

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

  • Затем вы можете просто проверить, есть ли у пользователя какие-либо роли администратора или супер администратора или принадлежит ли ему элемент, и отправить правильный ответ.

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

Если вы хотите использовать некоторую долгосрочную аутентификацию, вы можете использовать токен обновления с токенами jwt, они хранятся в базе данных и могут использоваться для создания нового токена jwt.

Надеюсь, это поможет.

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