Исключить менеджера из Tomcat Single Sign On

Использование JAAS для единого входа на сервере Tomcat без Apache. SSO контролирует доступ к нескольким связанным приложениям и отлично работает. Недавно я начал переход на Maven из Ant, и для использования плагина Tomcat для Maven мне нужно было настроить приложение Tomcat Manager, которое раньше мне не требовалось. Мне удалось его запустить и запустить как с помощью BASIC-аутентификации, так и CLIENT-CERT-аутентификации, наряду с другими веб-приложениями на сервере.

Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь проходит проверку подлинности в диспетчере, сеанс прерывается для других веб-приложений - вход IE в веб-приложение, вход в менеджер, обновление веб-приложения, перенаправление на страницу входа.

Мне удалось смягчить это перекрытие, определив клапан SSO на уровне контекста и область на уровне хоста. Это все еще позволяет SSO работать при навигации между веб-приложениями через браузер. Тем не менее, кросс-контекстные запросы AJAX и тому подобное возвращают ошибку "Пользователь не вошел", пока я не получу доступ к другому веб-приложению, о котором идет речь. При использовании этого подхода аутентификация для Manager была эффективно изолирована от других веб-приложений.

Короче говоря, я ищу лучший способ сделать единый вход через SSL/ аутентификацию базы данных доступным для моих веб-приложений с использованием модуля аутентификации JAAS, но заставлять Tomcat исключить Manager из единого входа. IE SSO через SSL для Webapps 1,2,3, но аутентификация UN/PW не зависит от SSO для Manager, а аутентификация независима между ними.

Есть ли способ сделать это?

Текущая конфигурация:

<Engine name="Catalina" defaultHost="localhost">

  <Host name="localhost" appBase="webapps"
        unpackWARs="true" autoDeploy="false"
        xmlValidation="false" xmlNamespaceAware="false">

    <Realm className="org.apache.catalina.realm.JAASRealm" appName="CustomLogin"
           userClassNames="com.foo.bar.User" roleClassNames="com.foo.bar.Role"
           useContextClassLoader="true" debug="false"/>
    <Valve className="org.apache.catalina.authenticator.SingleSignOn"/>

    <Context path="/Webapp1" docBase="webapp1">
        <ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
    </Context>

    <Context path="/Webapp2" docBase="webapp2">
        <ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
    </Context>

    <Context path="/Webapp3" docBase="Webapp3">
        <ResourceLink name="jdbc/WEBAPP" global="jdbc/WEBAPP" type="java.sql.DataSource"/>
    </Context>

    <Context path="/manager" docBase="manager" AntiJARLocking="false" antiResourceLocking="false" privileged="true" reloadable="false">
        <Realm className="org.apache.catalina.realm.MemoryRealm"></Realm>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="manager_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
    </Context>
  </Host>
</Engine>

При использовании этой конфигурации все веб-приложения и Диспетчер попадают под контроль единого входа, и вышеописанное перекрытие происходит - IE входит в webapp1 через SSL, затем через Диспетчер через UN/PW, затем обновляет webapp1, перенаправленный на страницу входа.

Перемещение клапана SSO в контексты веб-приложений решает эту проблему, но вызывает ответ "Пользователь не вошел в систему" ​​для кросс-контекстных запросов AJAX.

0 ответов

Другие вопросы по тегам