Пример кода и документации для входа с Apple Реализация взята из этого сообщения в блоге. Это один из немногих примеров, в котором описывается настройка необходимого клиента Apple и идентификаторов служб, а также показаны примеры декодирования токенов. (https://developer.okta.com/blog/2019/06 ... with-apple)
Как видите в этом примере есть временная переменная случайного состояния, которая сохраняется в сеансе PHP. Это используется для проверки возвращаемого POST от Apple, чтобы гарантировать, что адресован правильный сеанс ответа. Однако в моем случае POST-запрос перенаправления от Apple приводит (в большинстве случаев, см. ниже) к созданию нового файла cookie PHPSESSID, а ранее сохраненная переменная состояния теряется.
Вот что я сейчас наблюдаю в процессе аутентификации:
- Сессия запускается в соответствии с инициализацией общей структуры (см. ниже)Вот что я сейчас наблюдаю в процессе аутентификации:
Сессия запускается в соответствии с инициализацией общей структуры (см. ниже)Вот что я сейчас испытываю в процессе аутентификации:
Сессия запускается в соответствии с инициализацией общей структуры (см. Ниже)Вот что я сейчас испытываю в потоке аутентификации:
Сессия запускается в соответствии с инициализацией общей структуры (см. Ниже) li>
Переменная состояния случайной проверки создана и сохранена в переменной сеанса:
- Ссылка создана для кнопки «Войти с Apple» согласно документации
- Проверив вкладку «Приложение» инспектора браузера (Chrome), вы можете увидите, что существует файл cookie PHPSESSID, управляющий текущим сеансом. В данном случае он имеет идентификатор tk4bh...
Нажмите на ссылку, пользователь перейдет с моего сайта на appleid.apple.com, чтобы начать цикл аутентификации.
- Завершите вход в систему с помощью Apple и нажмите кнопку, чтобы вернуться на мой веб-сайт с POST, содержащим токен аутентификации
< img alt="ПОЛНЫЙ ВХОД В АККАУНТ APPLE" src="https://i.sstatic.net/xF50nv9i.png" /> - POST будет перенаправлен обратно на любое указанное перенаправление URL-адрес был указан в исходной ссылке «Войти через Apple» (Примечание: этот URL-адрес необходимо добавить к идентификатору службы Apple, используемому для клиента)
- Один раз запрос POST возвращается на мой веб-сайт, вы увидите сообщение об ошибке, что запрос не удалось аутентифицировать, поскольку переменная State, предоставленная возвращаемой полезной нагрузкой POST, не соответствует сохраненному $_SESSION['state'] переменная. Это связано с тем, что значение $_SESSION['state'] не установлено.
- И снова, проверив вкладку «Приложение» инспектора браузера, вы можете увидеть, что есть присутствует файл cookie PHPSESSID, но это новый файл cookie. Идентификатор этого нового файла cookie теперь равен rf1k5...
Таким образом, остается вопрос: почему вновь созданный файл cookie может сохраняться в браузере посредством просмотра и перенаправления авторизации Apple, а файл cookie, созданный в какой-то другой момент просмотра пользователем (каждая страница имеет общий тот же метод session_start), а затем используемый для сохранения состояния проверки., переменная постоянно «забывается», и необходимо создать новый файл cookie?
Сайт работает под управлением nginx и PHP 8.1.29. INI-конфигурация текущего сеанса следующая:

ПРИМЕЧАНИЕ:
- session.cookie_lifetime имеет значение 0 (которое я хотел бы сохранить)
- session.save_path ведет к серверу Redis (который не должен ни на что влиять на стороне клиента браузера, но ??)
- Все сеансы инициируются одним вызовом в PHP платформа, которая добавляет следующие параметры сеансовых файлов cookie:
// safe wrapper around `session_start` to ensure session id is valid, avoiding PHP warnings/errors
function safe_session_start() {
// if session has already started, just return
if ( session_status() != PHP_SESSION_NONE ) {
return true;
}
if ( isset($_COOKIE[session_name()]) AND ! preg_match('/^[-,a-zA-Z0-9]{1,128}$/', $_COOKIE[session_name()]) ) {
unset($_COOKIE[session_name()]);
}
$options = ['cookie_secure' => COOKIE_SSL, 'cookie_httponly' => true, 'cookie_domain' => COOKIE_DOMAIN, 'cookie_path' => COOKIE_PATH];
return session_start($options);
}
//---------------------------------------------------------
Подробнее здесь: https://stackoverflow.com/questions/790 ... ple-on-web