4

編集:エラーが見つかりました。次のようなコードの小さな平和が\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

あなたは迷っています。エラーも警告もありません。ユーザー プロバイダーは単に null です。とにかくこの投稿を読んでくれてありがとう。その件については github で議論します。

--

FOSOAuthServerBundle を使用して OAuth2 サーバーを構築しています。grant_type=password で access_token をリクエストし、カスタム UserProvider で form_login を使用する限り、すべてが稼働しています。

私の 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 は常に null です。

私がここで間違っていることを誰か知っていますか?私は完全に立ち往生しており、どんな助けも大歓迎です!

4

0 に答える 0