Как проверить, вошел ли пользователь в систему с помощью PHP OAUTH

Я создаю веб-приложение с аутентификацией OAUTH для Azure AD. Я имею в виду, что вы входите в мое приложение через свою учетную запись Azure AD/Office365. После успешного входа в систему я сопоставляю GUID пользователя Azure AD с пользователем в моей базе данных Mysql. Я установил в информации о сеансе, что пользователь зарегистрирован.

Я использовал это руководство для основ: 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