#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 в браузере.
Еще одна вещь — многие примеры, которые я нахожу в OAM SDK, касаются форм входа. Мне не нужно выполнять аутентификацию пользователя, и мне не нужно самому разговаривать с OAM, чтобы проверить, защищен ли ресурс или нет. Я имею дело с уже аутентифицированным запросом — нужно просто каким-то образом получить UserSession и токен пользователя из HttpServletRequest, чтобы сгенерировать новый OAMAuthnCookie, чтобы мой следующий запрос (например, с использованием клиента apache) был выполнен успешно.. Раньше я предполагал, что это будет нетрудно сделать, но сейчас я немного в тупике.
Спасибо за внимание.
Ответ №1:
- генерация ObAccessClient.xml из консоли OAM, чтобы установить контакт между кодом, над которым вы работаете (который будет называться Access Client), и OAM
- включая JAR-файлы из загружаемого OAM SDK в ваше приложение
- написание кода в вашем приложении (например, в фильтре аутентификации или сервлете) для установления связи с OAM через его SDK для окончательной аутентификации / авторизации и т. Д.
Я также нашел эти статьи очень информативными:
Код, который я имел в виду, в конечном итоге сгенерирует новый файл cookie аутентификации, который я передам сервлету отчетов для дальнейшей авторизации (поскольку этот файл cookie действительно удаляется из запроса до того, как он попадает в мое приложение). Согласно другой статье Oracle A-Team, единственный способ, который я нашел для создания такого файла cookie, заключается в изменении настройки в консоли OAM для включения другого файла cookie (OAM_IDENTITY_ASSERTION) в запросы.
В процессе вышеупомянутого расследования я, наконец, наткнулся на этот волшебный ответ на вопрос на форумах Oracle. Согласно этому, в консоли OAM есть пользовательская настройка, которая позволяет отключить фильтрацию OAMAuthnCookie по умолчанию.
filterOAMAuthnCookie=false
В нашем случае это меня идеально устроило. Действительно, после изменения рассматриваемый файл cookie, наконец, достиг моего приложения, в результате чего я смог передать его последующим запросам в Oracle Reports без использования OAM SDK.