シングルサインオンを実現するために、Kerberos拡張のマイルストーン2でPOCしています。私のセットアップのドメイン外のKerberos拡張、SSO、マシン
クイック概要:
KDC:のWindows Server 2003(SP2)
Webサーバ:のUbuntu 10.04、Tomcatの5.5はJava 1.6.0_22(ないドメイン上)
春:フレームワーク3.0.5、セキュリティ3.0.4、Kerberos拡張1.0.0 M2
まず、SPNEGO認証を試み、ログインページにリダイレクトできないように設定しました。 これは、SpnegoAuthenticationProcessingFilterの "failureHandler"プロパティを設定して行います。私はこのドメインをドメイン内外のWindowsマシン(XPおよび7)で正常にテストしました。ドメイン外のマシンは、ログインページ にリダイレクトされ、正常にログインできます。ここ
は私の設定です:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<http entry-point-ref="spnegoEntryPoint" auto-config="false">
<intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/j_spring_security_check*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" />
<custom-filter ref="spnegoAuthenticationProcessingFilter" position="BASIC_AUTH_FILTER" />
<form-login login-page="/login.html" default-target-url="/" always-use-default-target="true"/>
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="kerberosServiceAuthenticationProvider" />
<authentication-provider ref="kerberosAuthenticationProvider"/>
</authentication-manager>
<beans:bean id="spnegoEntryPoint"
class="org.springframework.security.extensions.kerberos.web.SpnegoEntryPoint" />
<beans:bean id="spnegoAuthenticationProcessingFilter"
class="org.springframework.security.extensions.kerberos.web.SpnegoAuthenticationProcessingFilter">
<beans:property name="failureHandler">
<beans:bean class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
<beans:property name="defaultFailureUrl" value="/login.html" />
<beans:property name="allowSessionCreation" value="true"/>
</beans:bean>
</beans:property>
<beans:property name="authenticationManager" ref="authenticationManager" />
</beans:bean>
<beans:bean id="kerberosServiceAuthenticationProvider"
class="org.springframework.security.extensions.kerberos.KerberosServiceAuthenticationProvider">
<beans:property name="ticketValidator">
<beans:bean
class="org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator">
<beans:property name="servicePrincipal" value="HTTP/mywebserver.corpza.corp.co.za"/>
<beans:property name="keyTabLocation" value="classpath:mywebserver.keytab" />
<beans:property name="debug" value="true"/>
</beans:bean>
</beans:property>
<beans:property name="userDetailsService" ref="dummyUserDetailsService" />
</beans:bean>
<beans:bean id="kerberosAuthenticationProvider" class="org.springframework.security.extensions.kerberos.KerberosAuthenticationProvider">
<beans:property name="kerberosClient">
<beans:bean class="org.springframework.security.extensions.kerberos.SunJaasKerberosClient">
<beans:property name="debug" value="true" />
</beans:bean>
</beans:property>
<beans:property name="userDetailsService" ref="dummyUserDetailsService" />
</beans:bean>
<beans:bean class="org.springframework.security.extensions.kerberos.GlobalSunJaasKerberosConfig">
<beans:property name="debug" value="true" />
<beans:property name="krbConfLocation" value="/etc/krb5.conf" />
</beans:bean>
<beans:bean id="dummyUserDetailsService" class="main.server.DummyUserDetailsService"/>
</beans:beans>
Windowsマシンがドメイン外にある場合には、私のWebサーバがで応答のWindowsマシンが応答する に(いつもどおり)ヘッダ「WWW認証ネゴシエート」 SpnegoAuthenticationProcessingFilterは、 "Negotiate Header was invalid ..."と表示され、NTLMヘッダー( "Negotiate TlRM ...")を使用して、ログインページにユーザをリダイレクトします。すばらしいです。
問題:
このウェブアプリを使用する必要がありますドメイン外永久にあるMacとLinuxのマシンの数があります。 ウェブアプリケーション(Firefox 3.6)を起動すると、私のWebサーバーは、"WWW-Authenticate Negotiate"ヘッダーに応答して、 クライアントにウェブアプリケーションがKerberos化していると通知しますが、MacまたはLinuxマシンはまったく応答しません。したがって、SpnegoAuthenticationProcessingFilter が再び入力されることはなく、したがって失敗もなく、その後ログインページへのリダイレクトも行われません。
質問:
なぜMacとLinuxのマシンがWindowsマシン(私はちょうどそれを尋ね信じてすることはできません...)と同じように応答しませんか?
私は、MacとLinuxのマシンが(kinit経由で)チケットを取得したときに認証を受けることができることを知っていますが、これは良い解決策のようには思われません チケットも有効期限が切れます。
Windowsマシンと同じように、これらのマシンにNTLMヘッダーを返す方法はありますか? 他の提案や方法がある場合は、お知らせください。
b.w. MacとLinuxマシンでテストするために私が使ったFirefoxを設定しました("network.negotiate-auth.delegation-uris"と"network.negotiate-auth。は ".corpza.corp.co.za"に設定されました)