2016-03-20 7 views
3

Мне нужно написать настраиваемый Jaspic ServerAuthModule (которому необходимо добавить проприетарное Cookie аутентификации в HTTP-ответ и HTTP-запрос для распространения на приложения, запущенные на сервере приложений). Аутентификация должна выполняться с использованием Kerberos, SPNEGO.Jaspic ServerAuthModule, делегирующий JAAS Krb5LoginModule

Сервер приложений для использования является JBOSS EAP 6.4.x

мне удалось получить удостоверение подлинности с помощью JAAS Krb5LoginModule работает.

JBOSS EAP Standone.xml Я использую:

<security-domain name="host" cache-type="default"> 
    <authentication> 
     <login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required"> 
      <module-option name="debug" value="true"/> 
      <module-option name="principal" value="HTTP/[email protected]"/> 
      <module-option name="storeKey" value="true"/> 
      <module-option name="useKeyTab" value="true"/> 
      <module-option name="doNotPrompt" value="true"/> 
      <module-option name="keyTab" value="/Users/jet/Downloads/kerberos/macbookAirRCH.keytab"/> 
     </login-module> 
    </authentication> 
    </security-domain> 
    <security-domain name="SPNEGO" cache-type="default"> 
    <authentication> 
     <login-module code="SPNEGO" flag="required"> 
      <module-option name="serverSecurityDomain" value="host"/> 
     </login-module> 
    </authentication> 
    <mapping> 
     <mapping-module code="SimpleRoles" type="role"> 
      <module-option name="[email protected]" value="User,Admin"/> 
     </mapping-module> 
    </mapping> 
    </security-domain> 

JBoss-web.xml:

<jboss-web> 
    <security-domain>SPNEGO</security-domain> 
    <valve> 
     <class-name>org.jboss.security.negotiation.NegotiationAuthenticator</class-name> 
    </valve> 
    <context-root>kerberosREST</context-root> 
</jboss-web> 

Мне также удалось получить заказной JÄSPI модуль работает (extends org.jboss.as.web.security.jaspi.modules.WebServerAuthModule) используя следующую конфигурацию:

<security-domain name="testDomain" cache-type="default"> 
    <authentication-jaspi> 
     <login-module-stack name="lm-stack"> 
     <login-module code="SPNEGO" flag="required"> 
      <module-option name="serverSecurityDomain" value="host"/> 
     </login-module> 
     </login-module-stack> 
     <auth-module code="ch.test.jaspic.CustomServerAuthModule" flag="required" login-module-stack-ref="lm-stack"/> 
    </authentication-jaspi> 
     <mapping> 
      <mapping-module code="SimpleRoles" type="role"> 
      <module-option name="[email protected]" value="User,Admin"/> 
      </mapping-module> 
      </mapping> 
</security-domain> 

JBoss-web.xml:

<jboss-web> 
    <security-domain>testDomain</security-domain> 
    <valve> 
     <class-name>org.jboss.as.web.security.jaspi.WebJASPIAuthenticator</class-name> 
    </valve> 
    <context-root>kerberosREST</context-root> 
</jboss-web> 

Как я могу использовать по умолчанию JAAS Krb5LoginModule?

Должен ли я включать два клапана в jboss-web.xml? (Порядок важен)

JBoss-web.xml:

<jboss-web> 
    <security-domain>testDomain</security-domain> 
    <valve> 
     <class-name>org.jboss.security.negotiation.NegotiationAuthenticator</class-name> 
    </valve> 
    <valve> 
     <class-name>org.jboss.as.web.security.jaspi.WebJASPIAuthenticator</class-name> 
    </valve> 
    <context-root>kerberosREST</context-root> 
</jboss-web> 

Большое спасибо заранее

ответ

3

Сервер приложений для использования является JBOSS EAP 6.4.x

К сожалению, JASPIC не очень хорошо реализован в этой версии JBoss. JBoss EAP 7 будет прекрасным и должен быть выпущен (если все будет хорошо) в этом году или, возможно, в начале следующего года (но никто не знает, даже люди в JBoss). Существует несколько бета-версий EAP 7, последний из которых называется JBoss WildFly 10, а чуть раньше называется EAP 7 beta 1.

В общем, есть мост JAAS, где вы позволяете своему JASPIC SAM вызывать ваш модуль входа JAAS , Вы должны понимать, что JASPIC SAM является механизмом аутентификации, а модуль входа JAAS является хранилищем идентификаторов.

Я уверен, что вам не требуется Конфигурация JBoss для модуля ввода JAAS. Это необходимо только для того, чтобы внутренний код JBoss (например, их реализация механизма аутентификации Servlet FORM) нашел этот модуль.

Если используется JASPIC, SAM находится в управлении.

Для профиля моста, обратитесь к этой статье для получения дополнительной информации:

https://blogs.oracle.com/nasradu8/entry/loginmodule_bridge_profile_jaspic_in

+0

спасибо, что нашли время, чтобы ответить. К сожалению, версия JBOSS EAP, которую я должен использовать, установлена ​​на 6.4.x. Если я правильно ее понимаю, профиль моста login именно то, что используется под капотом моего JASPIC SAM (который расширяет org.jboss.as.web.security.jaspi.modules.WebServerAuthModule). Это также прекрасно работает, если для входа в LoginModule я не храню хранилище идентификаторов, не требуется SPNEGO (например, HTTP-основы). У вас есть идеи по настройке JASPIC SAM и клапанов JBOSS для включения SPNEGO с JASPIC SAM? Спасибо –

+0

Мой плохой, не уверен, что действительные делегаты WebServerAuthModule для LoginModule. Я посмотрю на «DelegatingServerAuthModule». –

3

К моим (мало) пониманиям, Valve s, грубо говоря, более низкий уровень, контейнер-специфичны и container- широкий сервлет Filter аналог. Поэтому то, что вы пытаетесь сделать, должно действительно работать с конвейером (Valve sequence), представленным в вашем вопросе. Когда NegotiationAuthenticator завершила фактическую проверку подлинности, WebJASPIAuthenticator --the ServerAuthModule (SAM), в конечном счете, делегированные им - будет проверять аутентифицированный ли абонентKrb5Principal (или любой другой Principal JBoss заворачивает с) был связан с запросом на прежнем , и соответственно настройте файлы cookie.

Интересно, почему вы даже хотите использовать JASPIC только для настройки файлов cookie, хотя вы можете просто использовать простой Filter вместо этого (и избавиться от некоторой специфической конфигурации JBoss в качестве бонуса). Или вы могли бы альтернативно, если бы вы были готовы отказаться от каких-либо следов переносимости механизма аутентификации, попробуйте расширить NegotiationAuthenticator, переопределив его метод authenticate(...) и настроив файлы cookie оттуда, в зависимости от результата делегирования для переопределенной реализации.

И, наконец, существует подходящий (хотя и более жесткий) подход, основанный на поставщиках, где вы бы сбросили NegotiationAuthenticator и повторно реализовали его функциональность как SAM. Кто знает, что SPNEGO SAM с открытым исходным кодом может даже существовать где-то там. Для аутентификации Kerberos вы можете повторно использовать существующие Krb5LoginModule , делегируя ему - в качестве dexter meyers wrote - в соответствии с JASPIC. Профиль моста LoginModule (глава 6 спецификации). LoginModule s (LMs), конечно, не предполагается использовать напрямую, но через LoginContext s, которые, в свою очередь, нуждаются в некотором Configuration, чтобы найти нужный LM и инициализировать его. Если вы собираетесь повторно использовать JBoss Configuration (и, следовательно, сохраните соответствующий собственный XML), предоставьте собственное постоянное представление или просто скопируйте его по своему выбору. LoginContext/Configuration - ваш выбор.

В идеале вы должны повторно реализовать LM тоже, возможно, во втором SAM, организуя вызовы к двум из отдельного ServerAuthContext. Это приведет к снижению собственной конфигурации, связанной с проверкой подлинности, за счет дополнительной сложности и кода для поддержки.

+1

Спасибо за ваше время. Я действительно посмотрю на org.jboss.security.auth.container.modules.DelegatingServerAuthModule. Я не хотел использовать фильтр, потому что я думаю, что логика, которая должна быть запущена для каждого запроса (Cookies проверяет подлинность, если не аутентифицирована, перенаправление Krb5 ...) слишком сложна для фильтра. Более того, насколько я знаю, можно добавить Cookie к HttpServletResponse, но не к HttpServletRequest.Я действительно знаю, что этот случай немного особенный, но мне действительно нужно иметь возможность добавлять Cookie Response and Request. –

+0

Я попытаюсь настроить клапаны, как это было предложено в моем вопросе, используя DelegatingServerAuthModule и прокомментировать. Что касается повторного внедрения логина NegotiationAuthenticator в моем пользовательском JASPIC SAM: я подумал об этом, но хотел попробовать (насколько это возможно), чтобы я не мог этого сделать ... Я также буду искать SPNEGO SAM с открытым исходным кодом. Если у кого-то есть указатель, я был бы благодарен. –

+1

(1/3) *> «Я не хотел использовать фильтр ...» * Итак, если я не ошибаюсь, вы должны установить cookie * во время * обмена сообщениями аутентификации. Тогда ни параметр «Фильтр», ни простой параметр SAM не будут использоваться, так как всякий раз, когда предыдущий «NegotiationAuthenticator» выдает переадресацию, ваш компонент, являющийся вторым в цепочке, вообще не будет вызван. Вам либо придется каким-то образом подключиться к аутентификатору, либо отказаться от него в пользу реализации (повторной) реализации на основе SAM. Если я найду такой САМ, я дам вам знать. – Uux