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

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

Это хорошо.

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

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

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

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

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

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


person hello_earth    schedule 18.04.2019    source источник


Ответы (1)


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

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

Существует хорошее руководство по написанию кода в Документация Oracle здесь.

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

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

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

filterOAMAuthnCookie=false

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

person hello_earth    schedule 03.05.2019