Как получить доступ к моему новому Symfony API

Мне удалось объединить FOSUserBundle, FOSOAuthServerBundle и FOSRestBundle. Я создал клиента и создал UserController. У меня есть мой первый маршрут

http://domain.remote/api/users [ПОЛУЧИТЬ список пользователей].

OAuth работает, я получаю сообщение "Отказано в доступе". Я хотел бы написать некоторый код JavaScript, который обращается к этому API, но я боюсь, что даже не знаю, с чего начать.

Может кто-нибудь дать мне объяснение, как проходить аутентификацию и получать доступ к моему новому Symfony API? Любые примеры будут очень полезны. Желательно, не имея в виду JS Framework, чтобы я мог понять эту концепцию.

[Редактировать]

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

2 ответа

Решение

Ваша конечная точка /api/users защищенная конечная точка? Проверьте в файле security.yml, какое разрешение требуется для доступа к этим конечным точкам. Например:

api:
        pattern:    ^/
        security: true

Приведенный выше код означает, что все ваши api-URL-адреса защищены и для доступа к нему требуется авторизованный пользователь. Для входа в систему вам потребуется доступ к контексту безопасности. Наиболее распространенный подход к аутентификации в API REST - это использование метода OAuth, предпочтительно метода OAuth2. Я предлагаю вам использовать FOSOAuthServerBundle для работы с OAuth2.

После установки пакета вам нужно будет создать 4 объекта (accesstoken, authcode, client, refreshtoken), и ваш рабочий процесс API будет выглядеть следующим образом:

  1. Каждое из ваших устройств (например, мобильное приложение, настольный компьютер) будет иметь один client_id и client_secret.
  2. Вы запросите токен для своего API, используя конечную точку токена FOSOAuthServerBundle (/oauth/v2/token) передача типа предоставления (тип аутентификации, вы можете настроить позже) и данных, например: oauth/v2/token?client_id=<client_id>&client_secret=<client_secret>&grant_type=password&password=abc123&username=<yourlogin>
  3. Если учетные данные верны, api вернет токен доступа, который вы будете использовать для всех ваших последующих запросов: http://domain.remote/api/users?access_token? Njc4NTA0MzQ3ZjE4MTBlOWU5ZGUxYTQ2ZWE3N2I2YzM4MzFjODcxMDdkYTU0MzIwOWE4Zjg4OGRiZWNjOTg2NQ

Это позволит вам делать авторизованные запросы к вашему API. Вы можете обратиться к документации FOSOAuthServerBundle для получения дополнительной информации.

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

У KNP есть действительно подробные учебники об этом. Пожалуйста, посмотрите на этот урок. Список всех учебных пособий по API можно найти здесь

Другие вопросы по тегам