Файл cookie SSO не работает при использовании постоянного файла cookie в openam/opensso

Я начал поддерживать ряд веб-сайтов, все из которых аутентифицированы с использованием системы единого входа openam. Однако, когда один из наших пользователей устанавливает постоянный файл cookie (DProPCookie), он не всегда работает.

Сценарий воспроизведения:

  1. Войдите в openam, установив постоянный файл cookie
  2. Перезапустите браузер (чтобы очистить файлы cookie сеанса)
  3. Перейдите на сайт A, пользователь автоматически вошел в систему из-за постоянного файла cookie.
  4. Перейдите на сайт B, пользователю предоставляется страница входа (они должны автоматически войти в систему).

После шага 3, если я удалю файл cookie iPlanetDirectoryPro из своего браузера, я смогу нормально войти на сайт B (используя постоянный файл cookie). Похоже, что файл cookie iPlanetDirectoryPro, созданный на сайте A, когда установлен DProPCookie, не работает на сайте B.

Обратите внимание, что я пробовал различные перестановки сайтов A и B, и в каждом случае сценарий был одинаковым.

Я новичок в openam, поэтому любые подсказки о том, как это отладить, были бы замечательными, или если я упустил что-то явно не так, пожалуйста, дайте мне знать.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Впоследствии я обнаружил, что файл cookie iPlanetDirectoryPro, возвращаемый при аутентификации с использованием DProPCookie, не работает. Таким образом, это не имеет ничего общего с перекрестным доменом.

  1. Войдите в openam, установив постоянный файл cookie
  2. Перезапустите браузер (чтобы очистить файлы cookie сеанса)
  3. Перейдите на сайт A, пользователь автоматически вошел в систему из-за постоянного файла cookie.
  4. Удалить все файлы cookie, кроме файлов cookie iPlanetDirectoryPro.
  5. Обновить страницу - попросили авторизоваться

Если я повторю тест, но с файлом cookie iPlanetDirectoryPro, сгенерированным при обычном входе в систему, то при обновлении страницы я автоматически пройду аутентификацию. (Я изменил название вопроса, чтобы отразить это).

ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ:

Включил отладку - вижу это исключение в логах:

IdName is :null
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
orgName is :xxx
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
AuthD.getIdentity() from IdUtils Name: null Org: xxx
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
AuthD.getIdentity: Got IdRepoException while getting Identity from IdUtils: Illegal universal identifier null.
amAuth:11/28/2012 05:11:25:750 PM GMT: Thread[TP-Processor2,5,main]
isLockedOut:Exception :
java.lang.NullPointerException
        at com.sun.identity.idm.server.IdCachedServicesImpl.search(IdCachedServicesImpl.java:585)
        at com.sun.identity.idm.AMIdentityRepository.searchIdentities(AMIdentityRepository.java:296)
        at com.sun.identity.authentication.service.AuthD.getIdentity(AuthD.java:1453)
        at com.sun.identity.authentication.service.AMAccountLockout.isMemoryLockout(AMAccountLockout.java:297)
        at com.sun.identity.authentication.service.AMAccountLockout.isLockedOut(AMAccountLockout.java:281)
        at com.sun.identity.authentication.service.AMAccountLockout.isLockedOut(AMAccountLockout.java:264)
        at com.sun.identity.authentication.service.AMLoginContext.processPCookieMode(AMLoginContext.java:1919)
        at com.sun.identity.authentication.service.AMLoginContext.processIndexType(AMLoginContext.java:1846)

Быстрый просмотр кода openam — похоже, что мы не получаем имя пользователя здесь, в AMAccountLockout.java:264:

   public boolean isLockedOut() {

       // has this user been locked out.

       String userDN = loginState.getUserToken();

       return isLockedOut(userDN);

   }

person mr_van    schedule 27.11.2012    source источник
comment
Мне кажется, что это ошибка, возможно, постоянные файлы cookie не работают должным образом при использовании функции блокировки учетной записи.   -  person Peter Major    schedule 29.11.2012


Ответы (3)


Режим Persistent Cookie изменился в OpenAM... Фактически DProCookie больше не используется.

Возможно, вы используете «режим ограниченного токена», также известный как «режим защиты от перехвата файлов cookie», и CDCServlet не выдает надлежащее утверждение аутентификации.

person Bernhard Thalmayr    schedule 28.11.2012
comment
Я использую openam версии 9.5.3, и я считаю, что постоянный файл cookie iPlanetDirectoryPro находится в версии 10.0. Кроме того, я не верю, что мы работаем в ограниченном режиме токена. Все, что, кажется, происходит, это файл cookie iPlanetDirectoryPro, который возвращается, когда клиент аутентифицируется с использованием постоянного файла DProPCookie, который на самом деле недействителен. - person mr_van; 28.11.2012

Возможно, вы столкнулись с https://bugster.forgerock.org/jira/browse/OPENAM-1002 ? Также это может быть проблема с вашими доменами cookie, возможно, сайт B перенаправляет на другой домен, где DProPCookie не виден?

person Peter Major    schedule 28.11.2012
comment
Проблема с доменом была моей первой мыслью, (так как это было впервые замечено между двумя сайтами, которые находились в разных доменах). Однако это также происходит с двумя сайтами в одном домене. Также кажется, что наша система использует только одну область. Так что мы не можем поразить эту ошибку. Спасибо, в любом случае! - person mr_van; 28.11.2012

В конечном итоге мы обнаружили, что проблема заключалась в том, что файл cookie SSO, сгенерированный постоянным файлом cookie, не имел модулей аутентификации, и поэтому уровень аутентификации был установлен на Integer.MIN_VALUE;.

В нашей ситуации мы сделали немного хакерское исправление, чтобы вместо этого установить значение 0, что устраняет проблему.

Я предполагаю, что правильно было бы либо иметь отдельный модуль аутентификации для постоянных входов в систему cookie, либо хранить модуль аутентификации в файле cookie SSO, сгенерированном постоянным файлом cookie.

person mr_van    schedule 13.12.2012