2012-06-05 19 views
5

同じTomcatインスタンスに2つの異なるWebアプリケーションを使用しています。 Webアプリケーションの1つともう1つはRESTサービスです。ユーザーがWebアプリケーションにログインしてRESTサービスを呼び出すと、RESTはWebアプリケーションを使用してログインしたユーザーで認証されます。私はどのようにしてSSOをtomcatに実装できますか>誰でも実装していれば、mwを助けてください。WebアプリケーションとRESTサービスTomcatとSpring SecurityのSSO

更新: 私は最初のWebアプリケーションでSpring SecurityとJ2EEPreAuthenticationメカニズムを実装しました。このアプリケーションは、DOJO(JavaScript Framework)を使用して2番目のアプリケーション(RESTサービス)を呼び出します。

更新: 解決策を見つけました。下の私の答えをお読みください。

答えて

6

従来のWebアプリケーションとRESTful Webサービスのような非Webベースのアプリケーションの間でSSOを実装できます。この例では、WebアプリケーションとRESTful Webサービス間でSSOを実装するためのサンプルコードを示します。以下はspring-security.xmlファイル

<security:http create-session="never" use-expressions="true" 
        auto-config="false" 
        entry-point-ref="preAuthenticatedProcessingFilterEntryPoint" > 

     <security:intercept-url pattern="/**" access="permitAll"/> 
     <security:intercept-url pattern="/admin/**" access="hasRole('tomcat')"/> 
     <security:intercept-url pattern="/**" access="hasRole('tomcat')"/> 
     <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter"/> 
     <!-- Required for Tomcat, will prompt for username/password twice otherwise --> 
     <security:session-management session-fixation-protection="none"/> 
    </security:http> 

    <bean id="preAuthenticatedProcessingFilterEntryPoint" 
       class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/> 

    <bean id="preAuthFilter" 
       class="org.springframework.security.web.authentication.preauth.j2ee.J2eePreAuthenticatedProcessingFilter"> 
     <property name="authenticationManager" ref="appControlAuthenticationManager"/> 
     <property name="authenticationDetailsSource" 
         ref="j2eeBasedPreAuthenticatedWebAuthenticationDetailsSource"/> 
    </bean> 

    <security:authentication-manager alias="appControlAuthenticationManager"> 
     <security:authentication-provider ref="preAuthenticatedAuthenticationProvider"/> 
    </security:authentication-manager> 

    <bean id="preAuthenticatedAuthenticationProvider" 
       class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> 
     <property name="preAuthenticatedUserDetailsService" ref="inMemoryAuthenticationUserDetailsService"/> 
    </bean> 

    <bean id="j2eeBasedPreAuthenticatedWebAuthenticationDetailsSource" 
       class="org.springframework.security.web.authentication.preauth.j2ee.J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource"> 
     <property name="mappableRolesRetriever" ref="webXmlMappableAttributesRetriever"/> 
     <property name="userRoles2GrantedAuthoritiesMapper" ref="simpleAttributes2GrantedAuthoritiesMapper"/> 
    </bean> 

    <bean id="webXmlMappableAttributesRetriever" 
       class="org.springframework.security.web.authentication.preauth.j2ee.WebXmlMappableAttributesRetriever"/> 

    <bean id="simpleAttributes2GrantedAuthoritiesMapper" 
       class="org.springframework.security.core.authority.mapping.SimpleAttributes2GrantedAuthoritiesMapper"> 
     <property name="attributePrefix" value=""/> 
    </bean> 

    <bean id="inMemoryAuthenticationUserDetailsService" 
       class="com.org.InMemoryAuthenticationUserDetailsService"/> 

上記のコードで設定されたWebアプリケーションです。同じコードをRESTプロジェクトのspring security xmlファイルに入れることもできます。

<security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Wildcard means whole app requires authentication</web-resource-name> 
      <url-pattern>/*</url-pattern> 
      <http-method>GET</http-method> 
      <http-method>POST</http-method> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>tomcat</role-name> 
     </auth-constraint> 

     <user-data-constraint> 
      <!-- transport-guarantee can be CONFIDENTIAL, INTEGRAL, or NONE --> 
      <transport-guarantee>NONE</transport-guarantee> 
     </user-data-constraint> 
    </security-constraint> 
    <login-config> 
     <auth-method>FORM</auth-method> 
     <form-login-config> 
      <form-login-page>/login.jsp</form-login-page> 
      <form-error-page>/error.jsp</form-error-page> 
     </form-login-config> 
    </login-config> 

上記のコードは唯一の通常のWebアプリケーションにする必要があります:web.xmlファイルに次のコードを追加します。次に、tomcatのserver.xmlファイルでSSOバルブを有効にします。 Tomcatでは、CookieベースのSSOログインを使用します。セッションIDはCookieに格納されます。ブラウザがクッキーを無効にした場合、SSOは機能しません。

この説明は役立ちます。

1

Tomcatは(設定で)すぐにSSO機能を提供しますが、独自の認証メカニズムで動作します。 Tomcatのコンテナ管理SSOとアプリケーション管理(この場合はSpring)認証メカニズムを混在させることはできません。

SpringのSSO機能(存在する場合)を調べる必要があります。

+0

J2EEPreAutenticationProviderを使用して、Tomcat認証とSpringを混在させることができます。私はそれをすることができた。しかし、私はRESTサービスと別の通常のWebアプリケーションのSSO実装が必要です – Krishna

関連する問題