прокси-сервер oracle weblogic OAM servlet — как распространять OAMAuthnCookie

#java #oracle #weblogic #single-sign-on #oam

#java #Oracle #weblogic #единый вход #oam

Вопрос:

Я пытаюсь бороться с SSO в версии weblogic 12.2.1.3. Мы интегрировали его с OAM / OID в более крупное приложение, состоящее из Oracle Forms amp; Reports. В дополнение к формам у нас есть различные пользовательские приложения на основе сервлетов, которые необходимо вызывать из форм.

Это нормально.

Поскольку аутентификация происходит в мире Oracle, через экран входа в OAM, до сих пор мне не приходилось возиться с управлением доступом в моем пользовательском коде Java, кроме получения имени пользователя из заголовков HTTP.

Плохо то, что иногда нам нужны наши сервлеты, чтобы действовать как посредник между формами и отчетами. Например. Мне нужно вызывать различные вещи с отчетами (на сервере), преобразовывать их и отправлять обратно клиенту. Я знаю, что это звучит неправильно с точки зрения дизайна. Но все же это устаревший код, и нам нужно заставить это работать — по крайней мере, нужно попробовать..

Раньше нам это сходило с рук, передавая файлы cookie между запросами. Но в OAM 11 / 12g я понял, что файл cookie, необходимый для успешной проверки сеанса (OAMAuthnCookie), удаляется из запроса до достижения моего сервлета. Похоже, это действительно происходит, основываясь на дампах заголовков, которые я делаю, и отслеживая вызовы с помощью инструментов разработчика F12 в браузере.

Итак .. я понял, что мне нужно сгенерировать новый OAMAuthnCookie или что-то, что создало бы его и присоединило к новому http-вызову.. Я просто хотел бы, чтобы эксперт или кто-то, кто имел дело с этим, проверил правильность следующего предположения — единственный способ сделать это — использовать OAM SDK (немного неинтуитивный imho).

Еще одна вещь — многие примеры, которые я нахожу в OAM SDK, касаются форм входа. Мне не нужно выполнять аутентификацию пользователя, и мне не нужно самому разговаривать с OAM, чтобы проверить, защищен ли ресурс или нет. Я имею дело с уже аутентифицированным запросом — нужно просто каким-то образом получить UserSession и токен пользователя из HttpServletRequest, чтобы сгенерировать новый OAMAuthnCookie, чтобы мой следующий запрос (например, с использованием клиента apache) был выполнен успешно.. Раньше я предполагал, что это будет нетрудно сделать, но сейчас я немного в тупике.

Спасибо за внимание.

Ответ №1:

Насколько я понял, работа с OAM SDK, насколько я видел (на момент написания этой статьи мы использовали Weblogic 12c с Access Manager, который ведет себя точно так, как описано в документах, в которых говорится об OAM 11g — поэтому я предполагаю, что это версия, которую мы тоже используем), включает

  • генерация ObAccessClient.xml из консоли OAM, чтобы установить контакт между кодом, над которым вы работаете (который будет называться Access Client), и OAM
  • включая JAR-файлы из загружаемого OAM SDK в ваше приложение
  • написание кода в вашем приложении (например, в фильтре аутентификации или сервлете) для установления связи с OAM через его SDK для окончательной аутентификации / авторизации и т. Д.

Здесь есть хорошее руководство о том, как писать код в документации Oracle .

Я также нашел эти статьи очень информативными:

Код, который я имел в виду, в конечном итоге сгенерирует новый файл cookie аутентификации, который я передам сервлету отчетов для дальнейшей авторизации (поскольку этот файл cookie действительно удаляется из запроса до того, как он попадает в мое приложение). Согласно другой статье Oracle A-Team, единственный способ, который я нашел для создания такого файла cookie, заключается в изменении настройки в консоли OAM для включения другого файла cookie (OAM_IDENTITY_ASSERTION) в запросы.

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

 filterOAMAuthnCookie=false
 

В нашем случае это меня идеально устроило. Действительно, после изменения рассматриваемый файл cookie, наконец, достиг моего приложения, в результате чего я смог передать его последующим запросам в Oracle Reports без использования OAM SDK.