Ошибка CAS при единой авторизации: как её устранить

Если при входе через 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 нет, а ошибка возникает у внешнего сервиса — единственный вариант — сообщить администратору этого сервиса точный текст ошибки и время попытки входа, чтобы он сверил её со своими логами.

Понравилась статья? Поделиться с друзьями: