Как да проверите дали потребителят все още е влязъл с PHP OAUTH

Създавам уеб приложение с OAUTH удостоверяване към Azure AD. Това, което имам предвид, е, че влизате в моето приложение чрез вашия акаунт в Azure AD / Office365. След като влизането е успешно, съпоставям GUID на потребителя на Azure AD с потребителя в моята база данни Mysql. Зададох в сесията информация, че потребителят е вписан.

Използвах този howto за основните неща: https://kvaes.wordpress.com/2016/10/21/azure-using-php-to-go-all-oauth2-on-the-management-api/

Основите на кода, който използвам за регистриране на потребител в моето PHP приложение:

//User is not logged in, try to log in
$provider = new TheNetworg\OAuth2\Client\Provider\Azure([
 'clientId' => getsetting('aadsso_clientid'),
 'clientSecret' => getsetting('aadsso_secret'),
 'redirectUri' => getsetting('aadsso_redirecturl')
]);

if (!isset($_GET['code'])) {

    // If we don't have an authorization code then get one
    $authUrl = $provider->getAuthorizationUrl();
    $_SESSION['oauth2state'] = $provider->getState();
    header('Location: '.$authUrl);
    exit;

// Check given state against previously stored one to mitigate CSRF attack
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {

    unset($_SESSION['oauth2state']);
    exit('Invalid state');

} else {

    try {
      // Try to get an access token (using the authorization code grant)
      $token = $provider->getAccessToken('authorization_code', [
          'code' => $_GET['code'],
          'resource' => 'https://graph.windows.net',
      ]);
    } catch (Exception $e) {

        exit ("Connection error. Contact the administrator");
    }

    // Optional: Now you have a token you can look up a users profile data
    try {

        // We got an access token, let's now get the user's details (AAD login succeeded)
        $me = $provider->get("me", $token);

        //Some code here LEFT OUT, to find the user in my MySQL database.

        $_SESSION['loggedin'] = 1;
        $_SESSION['aadguid']  = $me['objectId'];



    } catch (Exception $e) {


        // Failed to get user details
        exit ("Connection error. Contact the administrator");
    }

}

Това работи добре! Но когато задам "$_SESSION['loggedin'] = 1;", потребителят е влязъл в приложението.

Наистина искам да разбера как да накарам потребителя да излезе от моето приложение, когато излезе от своята сесия на Azure AD/Office365. Например, той влиза в моето приложение, отива на outlook.office.com, щраква върху излизане там. Когато той се върне към приложението ми и се опита да зареди страница, приложението ми трябва да „види“, че е излязъл от Azure AD.

Как да постигна това, без да загубя много производителност на приложението си?

Аз съм доста новобранец в това, но моля, дайте ми някои съвети.


person Mbrouwer88    schedule 19.05.2020    source източник
comment
Получихте ли решението?   -  person Debugger    schedule 19.10.2020


Отговори (1)


това може да не е същият код, който използвате, но microsoft има пример за PHP как да се удостоверите: https://docs.microsoft.com/en-ca/graph/tutorials/php?tutorial-step=3 ще видите, че някъде в този пример те прилагат маршрутизиране на URL адреса за излизане за laravel.

след това в регистрацията на вашето приложение под Удостоверяване -> има раздел, наречен URL адрес за излизане, ако посочите url там, тогава ако потребителят излезе от azure SSO, той ще изпрати повикване до този URL адрес за излизане, за да изпълни потенциално URL адреса за излизане които сте внедрили. което ще убие токена във вашето приложение, което след това вече не трябва да има сесия?

Знам, че не е точно това, което питате по отношение на добавянето му към вашия код, но моля, погледнете примера, може да искате да го тествате.

Надявам се това да помогне малко.

person alphaz18    schedule 20.05.2020
comment
В допълнение към горното може да искате да опитате и това - docs.microsoft.com/en-us/azure/active-directory/develop/ - person Dev; 22.05.2020