2016-08-24 95 views
1

私はSpring Securityを使用するアプリケーションを持っており、カスタム認証プロバイダを使っていました。 SAML IDPをミックスに追加する必要があります。サンプルSAMLアプリケーションを起動して実行して、そのセキュリティコンテキストをベースとして使用します。私は私のマネージャーは次のように定義されています:Spring Security複数の認証プロバイダが2番目の認証プロバイダに接続しない

<security:authentication-manager alias="authenticationManager"> 
    <security:authentication-provider ref="myAuthenticationProvider" /> 
    <security:authentication-provider ref="samlAuthenticationProvider"/> 
</security:authentication-manager> 

を私はSAML IDPであるだけで、ユーザー名/ passeordと私のログインフォームを送信すると今、私はそれがその後、スローmyAuthenticationProviderを呼び出し、ログから見ることができますBadCredentialsException、その後は何もありません。私はSAMLAuthenticationProviderからの覗き見ではなく、他の例外も表示しません。

私は数回ドキュメントを読んでいますが、これは実行可能であると思われますが、例はありません。 SAMLとBasicAuthenticationを使用する例はありますか?

+0

どのような認証がこのプロバイダのそれぞれをサポートしていますか?彼らは同じ認証タイプをサポートしていますか?私はあなたUsernamePasswordAuthenticationTokenを送信していると思いますか? – jlumietu

+0

はい私はそうです。私はSAMLがこれで失敗するはずだと私は思っています。しかし、私はログには何も見ません。私はSAMLのログをFINEに設定していますが、これはバインドされていることがわかります...しかしエラーはありません。 – mmaceachran

+0

最初のauthenticationProviderが失敗して例外をスローする場合は、その例外を処理し、春のセキュリティが残りのフィルタを実行し続けるようにする必要があります。このリンクは役立ちます:http://stackoverflow.com/questions/25794680/multiple-authentication-mechanisms-in-a-single-app-using-java-config – Bryan

答えて

0

新しいIDPに追加の認証プロバイダを追加する必要はありません。新しい??を追加するだけですあなたのCachingMetadataManager Beanで。サンプルアプリで提供securityContext.xmlで:

<!-- IDP Metadata configuration - paths to metadata of IDPs in circle of trust is here --> 
<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager"> 
    <constructor-arg> 
     <list> 
      <!-- Example of classpath metadata with Extended Metadata --> 
      <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate"> 
       <constructor-arg> 
        <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider"> 
         <constructor-arg> 
          <bean class="java.util.Timer"/> 
         </constructor-arg> 
         <constructor-arg> 
          <bean class="org.opensaml.util.resource.ClasspathResource"> 
           <constructor-arg value="/metadata/idp.xml"/> 
          </bean> 
         </constructor-arg> 
         <property name="parserPool" ref="parserPool"/> 
        </bean> 
       </constructor-arg> 
       <constructor-arg> 
        <bean class="org.springframework.security.saml.metadata.ExtendedMetadata"> 
        </bean> 
       </constructor-arg> 
      </bean> 

      <!-- Example of HTTP metadata without Extended Metadata --> 
      <bean class="org.opensaml.saml2.metadata.provider.HTTPMetadataProvider"> 
       <!-- URL containing the metadata --> 
       <constructor-arg> 
        <value type="java.lang.String">http://idp.ssocircle.com/idp-meta.xml</value> 
       </constructor-arg> 
       <!-- Timeout for metadata loading in ms --> 
       <constructor-arg> 
        <value type="int">15000</value> 
       </constructor-arg> 
       <property name="parserPool" ref="parserPool"/> 
      </bean> 

      <!-- Example of file system metadata without Extended Metadata --> 
      <bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider"> 
       <constructor-arg> 
        <value type="java.io.File">/usr/local/metadata/idp.xml</value> 
       </constructor-arg> 
       <property name="parserPool" ref="parserPool"/> 
      </bean> 

     </list> 
    </constructor-arg> 

</bean> 

あなたがリスト内の2番目のBeanをアンコメントしている場合、それは/usr/local/metadata/idp.xmlで提供されるXMLファイルで指定された別のIDPを有効にします。 httpを介して別のIDPのメタデータを追加する場合は、ssocircleのIDPをコピーして調整します。

関連する問題