21

Spring Security を使用する Web アプリケーションでカスタム認証方法を使用するために実装する必要があるものを正確に見つけるのに苦労しています。現在、ブラウザフォームで標準のユーザー/パスワード認証を使用しているSpring Securityプラグインを備えたGrailsアプリケーションがあります。これは正しく機能しています。

これに加えて、一種のMAC認証を実装するメカニズムを実装する必要があります。HTTP リクエストに複数のパラメーター (ユーザー識別子、タイムスタンプ、署名など) が含まれている場合、それらのパラメーターを取得し、ハッシュと署名/タイムスタンプの比較を実行してから、ユーザーを認証する必要があります。

どこから始めればよいか100%確信が持てません。拡張/実装する必要がある Spring Security クラスは何ですか? リファレンス ドキュメントを読み、概念を十分に理解していますが、フィルター、プロバイダー、またはマネージャーが必要かどうか、または認証オブジェクトを正確に作成する場所と方法がよくわかりません。AbstractProcessingFilterを拡張したり、 AuthenticationProviderを実装したりしようとしてめちゃくちゃになりましたが、それらすべてをうまく機能させる方法を理解することに夢中になっています。

4

3 に答える 3

23
  1. : 、、およびAuthenticationProviderからすべての認証情報を取得するカスタムを実装します。AuthenticationgetCredentials()getDetails()getPrincipal()

    次の構成スニペットを使用して、Spring Security 認証メカニズムに結び付けます。

<bean id="myAuthenticationProvider" class="com.example.MyAuthenticationProvider">
    <security:custom-authentication-provider />
</bean>
  1. 標準実装から適切なものを見つけることができる場合、このステップはオプションです。Authenticationそうでない場合は、認証パラメーターを配置できるインターフェイスを拡張するクラスを実装します。

    (e.g. a user identifier, timestamp, signature, etc.)
    
  2. SpringSecurityFilter上記の 2 つのクラスを結び付けるカスタムを拡張します。たとえば、 Filter は、 の実装を入力として使用して を取得しAuthenticationManager、呼び出すことができます。authenticate()Authentication

    最初にAbstractAuthenticationProcessingFilterを拡張できます。

    を拡張するUsernamePasswordAuthenticationFilterを参照できますAbstractAuthenticationProcessingFilterUsernamePasswordAuthenticationFilter標準のユーザー名/パスワード認証を実装します。

  3. 標準を追加または置換するように Spring Security を構成しますAUTHENTICATION_PROCESSING_FILTER。Spring Security Filter の注文については、http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html#filter-stackを参照してください。

    これを実装に置き換える方法の構成スニペットを次に示します。

<beans:bean id="myFilter" class="com.example.MyAuthenticationFilter">
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/>
</beans:bean>
于 2009-04-10T11:37:31.453 に答える
1

最近、SpringSecurity3でカスタム認証を行うサンプルアプリケーションを作成しました。ソースコードはこちらです。詳細については、このブログ投稿をご覧ください。

于 2011-07-19T00:52:35.533 に答える
1

カスタムのauthenticationFilter(AUTHENTICATION_PROCESSING_FILTERを拡張)とauthenticationProviderを使用したsecurityContext.xml構成ファイルの例を次に示します。ユーザー認証データは、jdbc 接続によって提供されます。構成はSpring Security 2.0.x用です

<?xml version="1.0" encoding="UTF-8"?>

 <sec:global-method-security />

 <sec:http auto-config="false" realm="CUSTOM" create-session="always" servlet-api-provision="true"
  entry-point-ref="authenticationProcessingFilterEntryPoint" access-denied-page="/notauthorized.xhtml"
  session-fixation-protection="migrateSession">
  <sec:port-mappings>
   <sec:port-mapping http="80" https="443" />
  </sec:port-mappings>

  <sec:anonymous granted-authority="ROLE_ANONYMOUS" username="Anonymous" />
  <sec:intercept-url pattern="/**" access="ROLE_ANONYMOUS, ROLE_USER" />

  <sec:logout logout-url="/logoff" logout-success-url="/home.xhtml" invalidate-session="false" />

 </sec:http>

 <bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
  <property name="loginFormUrl" value="/login.xhtml" />
  <property name="forceHttps" value="false" />
 </bean>

 <bean id="authenticationProcessingFilter" class="mypackage.CustomAuthenticationProcessingFilter">
  <sec:custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
  <property name="defaultTargetUrl" value="/" />
  <property name="filterProcessesUrl" value="/logon" />
  <property name="authenticationFailureUrl" value="/loginError.xhtml" />
  <property name="alwaysUseDefaultTargetUrl" value="false" />
  <property name="authenticationManager" ref="authenticationManager" />
 </bean>

 <jee:jndi-lookup id="securityDataSource" jndi-name="jdbc/DB_DS" /> 

 <bean id="myUserDetailsService" class="mypackage.CustomJdbcDaoImpl">
  <property name="dataSource" ref="securityDataSource" />
  <property name="rolePrefix" value="ROLE_" />
 </bean>

 <bean id="apcAuthenticationProvider" class="mypackage.CustomDaoAuthenticationProvider">
  <property name="userDetailsService" ref="myUserDetailsService" />
  <sec:custom-authentication-provider />
 </bean>

 <bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
  <property name="providers">
   <list>
    <ref local="apcAuthenticationProvider" />
   </list>
  </property>
 </bean>

</beans>
于 2010-11-18T08:44:52.200 に答える