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