Как ограничить, кто может получить действительный токен доступа?

Я разработал сервис APIRest для использования данных из мобильного приложения. Я использовал комплекты Symfony2: FOSOAuthServerBundle, FOSUserBundle и FOSRestBundle и все работает нормально, но мне нужно различать пользователей панели администратора и пользователей API, потому что теперь, если я попытаюсь пройти аутентификацию с администратором из приложения, я получу токен, однако я только хочу получить действительный с пользователями API.

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

adminuser (ROLE_ADMIN)

https://app.myweb.com/oauth/v2/token?username=adminuser&password=12345&client_id=...&client_secret=...&grant_type=password

appuser (ROLE_APP)

https://app.myweb.com/oauth/v2/token?username=appuser&password=12345&client_id=...&client_secret=...&grant_type=password

Большое спасибо за правильное решение этой проблемы и извините за мой английский.

1 ответ

Из документации FOSOAuthServerBundle:

https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/index.md#step-5-configure-fosoauthserverbundle

Создайте провайдера пользователя и добавьте его в конфигурацию fos_oauth_server:

fos_oauth_server:
    ...
    service:
        user_provider: my_custom_user_provider_service

Создайте провайдера, расширяющего интерфейс Symfony\Component\Security\Core\User\UserProviderInterface, и проверьте, имеет ли пользователь ROLE_APP. Документировано здесь:

http://symfony.com/doc/current/cookbook/security/custom_provider.html

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