![](/img/trans.png)
[英]Java client and Kerberos / SSO - Krb5LoginModule - not re-using tickets
[英]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.