Приделал к сайту авторизацию через телеграм, это будет единственный способ авторизации:
<script async src="https://telegram.org/js/telegram-widget.js?19" data-telegram-login="mybot" data-size="large" data-auth-url="https://site.ru/user/auth.php" data-request-access="write"></script>
<?
define('BOT_TOKEN', '12223444:XXXXXXXXXXXXXXXXXXXXXXXXX');
function checkTelegramAuthorization($auth_data) {
$check_hash = $auth_data['hash'];
unset($auth_data['hash']);
$data_check_arr = [];
foreach ($auth_data as $key => $value) {
$data_check_arr[] = $key . '=' . $value;
}
sort($data_check_arr);
$data_check_string = implode("\n", $data_check_arr);
$secret_key = hash('sha256', BOT_TOKEN, true);
$hash = hash_hmac('sha256', $data_check_string, $secret_key);
if (strcmp($hash, $check_hash) !== 0) {
throw new Exception('Data is NOT from Telegram');
$_SESSION['custom_auth'] = null;
}
if ((time() - $auth_data['auth_date']) > 86400) {
throw new Exception('Data is outdated');
}
return $auth_data;
};
if (isset($_GET['hash'])) {
try {
$auth_data = checkTelegramAuthorization($_GET);
echo "Hello, " . $auth_data['username'];
$_SESSION['custom_auth'] = true;
} catch (Exception $e) {
$_SESSION['custom_auth'] = null;
die ($e->getMessage());
}
}
?>
Не пойму, что дальше сделать, что записать в куки чтобы узнавать пользователя, как продлевать сессию, чтобы не приходилось авторизовываться заново через 86400 секунд, если пользователь ходит по сайту. И как завершать его сессию принудительно и по его желанию?
Если сессия сама убивается, то видимо что то вносить надо в куку, чтобы сессия продлевалась?
Вопрос больше в безопасности и удобстве. Так, например при внутренней авторизации хешируют пароль и хранят в базе, а тут по сути внешняя авторизация с проверкой данных, т.е. вроде безопасно и на сайт не зайти без телеграм авторизации, подменив данные?!