0

Я хочу защитить свой API с помощью FOSUserBundle (и избегать использования FOSOAuthServerBundle из-за отсутствия документации с полным примером).Как подключить всех пользователей к пользователю по умолчанию без перехода на страницу входа?

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

firewalls: 
    dev: 
     pattern:  ^/(_(profiler|wdt)|css|images|js)/ 
     security:  false 
    api_doc: 
     pattern:  ^/api/doc 
     security:  false 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_token_generator: security.csrf.token_manager 
     logout:  true 
     anonymous: true 

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] } 
    - { path: ^/admin/, roles: [ROLE_SUPER_ADMIN]} 

Это здорово! Но для этого требуется, чтобы каждый из них был подключен до использования веб-сайта, чтобы я мог отображать список объявлений и т. Д. (Даже запросы GET нуждаются в подключении для целей безопасности)

Чтобы преодолеть, я думаю о имея всех пользователей, связанных с пользователем по умолчанию с ограниченными привилегиями (достаточно для простого запроса без публикации).

Можно ли это сделать?

Благодарим за помощь.

PS: Мне удалось заставить FOSUserBundle и FOSOAuthServerBundle работать вместе. Фактически, я смог создать клиента и получить токен доступа для него через командные строки. Но я не смог правильно настроить security.yml, чтобы получить страницу входа, которая возвращает токен доступа.

+0

Решение Oauth отвечает вашим потребностям и его конфигурации, в которой вам нужна помощь? – DevDonkey

+0

Мне не удалось найти хорошую документацию для настройки 'security.yml. Если у вас есть хороший документ, я буду счастлив! –

+0

Еще одна вещь, API будет только моим сайтом! Никакой третья сторона не участвует –

ответ

0

Взгляните на запись symfony по телефону How to Authenticate Users with API Keys. Запись содержит большую часть кода, который вам нужен, и хорошо документирован.

Вам нужно добавить поле для ключа API в таблицу fos_user, например.

ALTER TABLE fos_user ADD api_key VARCHAR(255) DEFAULT NULL; 

Кроме того, необходимо правильно реализовать ApiKeyUserProvider::getUsernameForApiKey для поиска в базе данных для пользователя на основе данного ключа API, что-то вроде этого:

$repository = $this->manager->getRepository('Application\UserBundle\Entity\User'); 
$user = $repository->findOneBy(array('apiKey' => $apiKey)); 
return empty($user) ? $user : $user->getUsername(); 

Я реализовал это несколько лет назад, это было просто следовать и отлично поработал!

+0

Спасибо за ссылку! Я работаю над ...;) –

+0

Дайте мне знать, как это получилось. – Onema