oAuth2 получить доступ и обновить токен, используя параллельный тип входа - PullRequest
0 голосов
/ 19 февраля 2019

Я не очень уверен в аутентификации Symfony и oauth ...

Мы получили веб-приложение со стандартным логином, которое работает, как и ожидалось.Сейчас мы пытаемся создать параллельный способ аутентификации для пользователей, использующих смарт-карты.Я могу прочитать смарт-карту, но не могу использовать oauth-запрос для получения токена доступа и refrsh.

Моя идея - использовать эти данные для аутентификации (оба сохранены в пользователетаблица):

  • идентификатор смарт-карты (пример: 2221).Это считывается со смарт-карты.
  • подпись смарт-карты (генерируется путем объединения имени, фамилии и других данных со смарт-карты).Моя идея заключалась в том, чтобы md5 () затем эту объединенную строку.Эта подпись также сохраняется в пользовательской таблице.

Итак, как я могу получить действительный токен доступа и обновить токен, используя эти данные?

Каков правильный тип_транта в этой ситуации и чтодругие необходимые параметры?

Вот мой код:

    $token = new UsernamePasswordToken($user, $smartCardSignature, 'main', $user->getRoles());

    $user = $token->getUser();

    $arrayOauthCredentials = array(
        "client_id"     => $client_id,
        "client_secret" => $client_secret,
        "grant_type"    => "password",
        "username"      => // ?????
        "password"      => // ?????
    );

    $oAuth2GetAccessTokenReq = $this->oAuth2HttpClient->createRequest("POST", $this->getOAuth2Endpoint(self::TOKEN_ACTION), null, $arrayOauthCredentials);
    $oAuth2Response =  $this->oAuth2HttpClient->send($oAuth2GetAccessTokenReq);
    $oAuth2 = json_decode($oAuth2Response->getBody(true));
    $accessToken  = $oAuth2->access_token;
    $refreshToken = $oAuth2->refresh_token;

    $session = $request->getSession();
    if ($session->has("r_t"))
        $session->remove("r_t");

    $session->set("r_t", $refreshToken);

    $user->setOAuth2Token($accessToken);
    $this->em->persist($user);
    $this->em->flush($user);

    $this->get('security.token_storage')->setToken($token);

Спасибо, ребята

...