public function testAuthenticateSuccess()
 {
     $content = ['access_token' => 'access_token', 'refresh_token' => 'refresh_token', 'expires_in' => 3600];
     $browserMock = $this->getMockBuilder(Browser::class)->disableOriginalConstructor()->getMock();
     $responseMock = $this->getMockBuilder(Response::class)->disableOriginalConstructor()->getMock();
     $responseMock->expects($this->once())->method('getStatusCode')->willReturn(200);
     $responseMock->expects($this->once())->method('getContent')->willReturn(json_encode($content));
     $browserMock->expects($this->once())->method('get')->willReturn($responseMock);
     $browserManager = $this->getMockBuilder(BrowserManager::class)->disableOriginalConstructor()->getMock();
     $browserManager->expects($this->once())->method('getBrowser')->willReturn($browserMock);
     $provider = new RoleTokenProvider($browserManager);
     $data = $provider->authentificate('/token', [], 'ROLE_ADMIN');
     $this->assertEquals($content['access_token'], $data['accessToken']);
 }
 /**
  * @param TokenInterface $token
  * @param UserProviderInterface $userProvider
  * @param $providerKey
  * @return UsernamePasswordToken
  */
 public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey)
 {
     $user = $userProvider->loadUserByUsername($token->getUsername());
     $config = $this->configProvider->getRoleConfig();
     $params = ["client_id" => $config['client_id'], "client_secret" => $config['client_secret'], "username" => $token->getUsername(), "password" => $token->getCredentials()];
     try {
         $storage = $this->roleTokenProvider->authentificate($config['endpoint'], $params, $this->role);
     } catch (BadAuthentificationException $e) {
         // CAUTION: this message will be returned to the client
         // (so don't put any un-trusted messages / error strings here)
         throw new CustomUserMessageAuthenticationException('Invalid username or password');
     }
     $roleToken = new RoleToken($user, $user->getPassword(), $providerKey, $user->getRoles());
     $roleToken->setAccessToken($storage['accessToken']);
     $roleToken->setRefreshToken($storage['refreshToken']);
     $roleToken->setRoleRequired($this->role);
     $roleToken->setExpiresIn($storage['expiresIn']);
     return $roleToken;
 }