FOSOAuthServerBundle и пользовательский поставщик аутентификации

Изменить: Обнаружил ошибку. Крошечный кусочек кода в \vendor\friendsofsymfony\oauth-server-bundle\FOS\OAuthServerBundle\Resources\config\oauth.xml который говорит:

<argument type="service" id="fos_oauth_server.user_provider" on-invalid="null" />

Поэтому, когда ваше определение сервиса в config.yml неверно или просто опечатка (из оригинальные документы)

If you're authenticating users, don't forget to set the user provider. Here's an example using the FOSUserBundle user provider:

# app/config/config.yml
fos_oauth_server:
...

service:
user_provider: fos_user.user_manager

ты потерялся. Нет ошибок, нет предупреждений, пользовательский поставщик просто нулевой. Спасибо за чтение этого сообщения в любом случае. Я буду обсуждать этот вопрос на GitHub.

Я строю сервер OAuth2 с FOSOAuthServerBundle. Все работает, пока я запрашиваю access_token с grant_type = password и использую form_login с пользовательским UserProvider.

Мой security.yml выглядит так.

security:
providers:
webservice:
id: webservice_user_provider

firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false

oauth_authorize:
pattern:    ^/oauth/v2/auth
form_login:
provider: webservice
check_path: login_check
login_path: login
anonymous: true

oauth_token:
pattern:    ^/oauth/v2/token
security:   false

api:
pattern:    ^/api
fos_oauth:  true
stateless:  true

default:
anonymous: ~

form_login:
provider: webservice
login_path: /login
check_path: /login_check

logout:
path:   /logout
target: /

login:
pattern:  ^/login$
security: false

Поскольку пользовательского поставщика не хватало для моих нужд, я реализовал пользовательский поставщик аутентификации, выполнив следующие действия. этот урок. Этот также работает, когда я пытаюсь войти с помощью стандартной формы входа. Я изменил security.yml на

    oauth_authorize:
pattern:    ^/oauth/v2/auth
webservice-login:
provider: webservice
check_path: login_check
login_path: /login
anonymous: true

webservice-login:
check_path: login_check
login_path: /login
provider: webservice

webservice-login поступает из SecurityFactory

class SecurityFactory extends FormLoginFactory
{
public function getKey()
{
return 'webservice-login';
}

protected function getListenerId()
{
return 'security.authentication.listener.form';
}

protected function createAuthProvider(ContainerBuilder $container, $id, $config, $userProviderId)
{
$provider = 'security.authentication_provider.als_webservice.'.$id;
$container
->setDefinition($provider, new DefinitionDecorator('security.authentication_provider.als_webservice'))
->replaceArgument(1, new Reference($userProviderId))
->replaceArgument(3, $id)
;

return $provider;
}
}

Когда я сейчас пытаюсь получить токен доступа, я получаю сообщение об ошибке: Ошибка:

Call to a member function loadUserByUsername() on a non-object in
vendor\friendsofsymfony\oauth-server-bundle\FOS\OAuthServerBundle\Storage\OAuthStorage.php at line 165.

В общем, UserProvider всегда равен нулю.

Кто-нибудь знает, что я здесь не так делаю? Я полностью застрял, и любая помощь очень ценится!

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]