Если при входе через CAS (Central Authentication Service) появляется ошибка авторизации, чаще всего дело в одном из трёх мест: рассинхронизации времени между сервером и клиентом, проблеме с cookie/сессией браузера или неверной регистрации сервиса-клиента на CAS-сервере. Разберём по порядку, что проверить и как исправить.
Почему CAS не пускает в систему
Протокол CAS работает через одноразовые тикеты: браузер получает ticket, сервис проверяет его на сервере CAS и открывает сессию. Ошибка возникает, если:
- тикет уже использован повторно (например, страница обновлена или открыта дважды);
- время на сервере приложения и на CAS-сервере расходится больше чем на пару минут;
- URL сервиса, на который пришёл запрос, не совпадает с тем, что зарегистрирован в настройках CAS;
- истёк срок действия сессии (Ticket Granting Ticket) на стороне сервера аутентификации;
- браузер блокирует сторонние cookie, из-за чего сессия CAS не сохраняется между доменами.
Как проверить причину самостоятельно
Откройте консоль разработчика в браузере (F12), вкладку Network, и повторите попытку входа. Обратите внимание на:
- код ответа на запрос к /cas/serviceValidate или /cas/p3/serviceValidate — там же в XML-ответе виден текст ошибки;
- совпадает ли параметр service в адресной строке с адресом, зарегистрированным для клиента;
- сохраняется ли cookie CASTGC после первого успешного входа;
- системное время сервера (сверьте через любой NTP-сервис) — расхождение ломает проверку тикетов.
Если ошибка появляется у всех пользователей сразу — проблема на стороне сервера CAS или его конфигурации. Если только у части — скорее всего дело в браузере или локальных cookie.
Что делать, если ошибка повторяется
Сначала очистите cookie для домена CAS-сервера и попробуйте войти заново в режиме инкогнито — это исключает конфликт старых сессий. Если не помогло:
- проверьте в конфигурации клиента точное совпадение service URL, включая протокол http/https и завершающий слэш;
- убедитесь, что сертификат TLS на CAS-сервере действителен — просроченный сертификат обрывает проверку тикета;
- синхронизируйте время сервера через NTP;
- посмотрите логи CAS-сервера (обычно cas.log) — там указывается точная причина отказа, а не только код ошибки в браузере.
Если доступа к серверу CAS нет, а ошибка возникает у внешнего сервиса — единственный вариант — сообщить администратору этого сервиса точный текст ошибки и время попытки входа, чтобы он сверил её со своими логами.