簡體   English   中英

Symfony Oauth2與加爾

[英]Symfony Oauth2 with gard

我正在嘗試使用OAuth 2連接配置防護。 我試圖通過將getCredentials函數中的重定向重定向到Microsoft登錄網站,但是無法正常工作。 我不知道該如何運作。 似乎此功能無法重定向。

public function getCredentials(Request $request)
{
    $provider = new Microsoft([
            'clientId'          => '0000000032624',
            'clientSecret'      => 'my-secret',
            'redirectUri'       => 'https://mysite/oauthlogin'
    ]);

    if(!$request->query->has('code')){
        // If we don't have an authorization code then get one
        $authUrl = $provider->getAuthorizationUrl();
        $request->getSession()->set('oauth2state', $provider->getState());
        //This doesn't work
        return new RedirectResponse($authUrl);

    // Check given state against previously stored one to mitigate CSRF attack
    }elseif ( empty($request->query->get('state')) || ($request->query->get('state')!==$request->getSession()->get('oauth2state')) ){
        return null;
    }else{
        // Try to get an access token (using the authorization code grant)
        $token = $provider->getAccessToken('authorization_code', [
            'code' => $request->query->get('code')
        ]);
        try {
            //when log with microsoft, check if user is allowed
            // We got an access token, let's now get the user's details
            $user = $provider->getResourceOwner($token);
             } catch (Exception $e) {
            // Failed to get user details
        }
    }

}

public function getUser($credentials, UserProviderInterface $userProvider)
{       
    return $userProvider->loadUserByUsername($user->getEmail());
}

public function checkCredentials($credentials, UserInterface $user)
{
    // check credentials - e.g. make sure the password is valid
    // no credential check is needed in this case

    // return true to cause authentication success 
    return true;
}

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    $url = $this->router->generate('homepage');
    return new RedirectResponse($url);
}

public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    $data = array(
            'message' => strtr($exception->getMessageKey(), $exception->getMessageData())           
            // or to translate this message
            // $this->translator->trans($exception->getMessageKey(), $exception->getMessageData())
    );
    $request->getSession()->set(Security::AUTHENTICATION_ERROR, $data);
    $url = $this->router->generate('login');
    return new RedirectResponse($url);
}

函數getCredentials()不應該返回Response ,它提供了getUser()使用的憑據。

getUser()文檔中:

憑證是getCredentials()的返回值

如果願意,可以拋出AuthenticationException。 如果返回null,則將為您引發UsernameNotFoundException。

如果拋出異常,則會調用onAuthenticationFailure() ,在這里您可以返回RedirectResponse

有關更多詳細信息,請參見\\Symfony\\Component\\Security\\Guard\\GuardAuthenticatorInterface的源代碼,其中包含有關其方法的大量說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM