Несколько аутентификатора на страже - PullRequest
0 голосов
/ 03 сентября 2018

Я создаю API Rest с помощью symfony 3.4. Мне нужно аутентифицировать пользователя на моем API, используя систему Oauth.

Итак, я использую систему защиты на Symfony. Я создал аутентификатор, который получает access_token в запросе, отправляемом клиентской стороной.

Это моя конфигурация (security.yml):

        oauth:
        pattern:   ^/
        stateless: true
        simple_preauth:
           authenticator: Oauth_authenticator
        provider: provider.google_user

Мой Oauth_authenticator:

class OauthAuthenticator implements SimplePreAuthenticatorInterface,AuthenticationFailureHandlerInterface
{

public function createToken(Request $request, $providerKey)
{

    $bearer = $request->headers->get('Authorization');

    $accessToken = substr($bearer, 7);


    return new PreAuthenticatedToken(

        'anon.',

        $accessToken,

        $providerKey

    );
}

public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey)
{
    $accessToken = $token->getCredentials();


    $user = $userProvider->loadUserByUsername($accessToken);


    return new PreAuthenticatedToken(
        $user,
        $accessToken,
        $providerKey,
        ['ROLE_USER']
    );
}

/**
 * This is called when an interactive authentication attempt fails. This is
 * called by authentication listeners inheriting from
 * AbstractAuthenticationListener.
 *
 * @return Response The response to return, never null
 */
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    return new Response("Authentication Failed ", 401);
}



public function supportsToken(TokenInterface $token, $providerKey)
{
    return $token instanceof PreAuthenticatedToken && $token->getProviderKey() === $providerKey;
}

}

Но, как вы видите, сейчас я напрямую добавляю google_provider.

Какой лучший способ реализовать ту же систему, но с двумя моими поставщиками (Google и Facebook) или более в будущем ??

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...