簡體   English   中英

Jaspic ServerAuthModule委托給JAAS Krb5LoginModule

[英]Jaspic ServerAuthModule delegating to JAAS Krb5LoginModule

我必須編寫一個自定義的Jaspic ServerAuthModule(需要將一個專有的身份驗證Cookie添加到HTTP響應和HTTP請求以傳播到App Server上運行的應用程序)。 必須使用Kerberos SPNEGO完成身份驗證。

要使用的Application Server是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/macbookAirRCH@EXAMPLE.COM"/>
          <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="user@EXAMPLE.COM" 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>

我還設法使用以下配置獲得定制的JASPI模塊( 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="user@EXAMPLE.COM" 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>

提前謝謝了

要使用的Application Server是JBOSS EAP 6.4.x.

不幸的是,JASPIC在這個版本的JBoss上實現得不是很好。 JBoss EAP 7會很好,應該在今年或明年年初發布(如果一切順利)(但沒人知道,甚至不是JBoss的人)。 EAP 7有幾個beta版本,最新版本稱為JBoss WildFly 10,稍早版本稱為EAP 7 beta 1。

通常,有一個JAAS橋,您可以讓JASPIC SAM調用您的JAAS登錄模塊。 您需要了解JASPIC SAM是身份驗證機制,JAAS登錄模塊是身份存儲。

我很確定你不需要 JASAS登錄模塊的JBoss特定配置。 這只需要讓JBoss內部代碼(例如他們的Servlet FORM認證機制的實現)找到該模塊。

如果使用JASPIC,則SAM處於控制之中。

有關橋接配置文件,請參閱此文章以獲取更多信息:

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

對於我的(小)理解, Valve粗略地說是一個較低級別,容器特定和容器范圍的Servlet Filter對應物。 因此,您嘗試做的事情應該確實與您的問題中提供的管道( Valve序列)一起使用。 NegotiationAuthenticator完成實際身份驗證時, WebJASPIAuthenticator - 最終由它委托的ServerAuthModule (SAM)將檢查經過身份驗證的調用者 Krb5Principal (或任何Principal JBoss包裝它)是否與前者的請求相關聯,並且相應地設置cookie。

我想知道為什么你甚至願意僅使用JASPIC來設置cookie,當你可以只使用一個簡單的Filter (並取消一些JBoss特定的配置作為獎勵)。 或者,如果您願意放棄任何身份驗證機制可移植性的痕跡,請嘗試擴展NegotiationAuthenticator ,覆蓋其authenticate(...)方法並從那里設置cookie,具體取決於對覆蓋的委派的結果實現。

最后是適當的(雖然更難)供應商中立的方法,你將放棄NegotiationAuthenticator並重新實現其作為SAM的功能。 誰知道 - 一個開源的SPNEGO SAM甚至可能存在於某個地方。 對於Kerberos身份驗證,您可以重用現有的Krb5LoginModule 1 ,通過委托給它 - 正如邁克斯所說的那樣 - 根據JASPIC的LoginModule Bridge Profile (規范的第6章)。 LoginModule (LMs)當然不應該直接使用,而是通過LoginContext來使用,而LoginContext又需要一些Configuration才能找到正確的LM並用它初始化它。 無論您是要重用JBoss的Configuration (因此保留相應的專有XML),提供您自己的持久表示,或者只是在自定義LoginContext / Configuration中進行硬編碼是您的選擇。

1理想情況下,您也可以在第二個SAM中重新實現LM,從單獨的ServerAuthContext編排對兩者的調用。 這樣做會將專有的身份驗證相關配置減少到零,但代價是增加了復雜性和維護代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM