Създавам уеб приложение с 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.
Как да постигна това, без да загубя много производителност на приложението си?
Аз съм доста новобранец в това, но моля, дайте ми някои съвети.