2017-01-25 8 views
0

私が抱えている問題は、このサイトで何度か議論されていますが、ほとんどの投稿はかなり古くなっています。私が経験しているものはsomething similarです。私はIdPとしてWSO2 IS 5.2を使用しています.SSOに参加する差分サーバーでホストされている2つのJavaベースのWebアプリケーションがあります。各webapp(SP)はSpring-SAML拡張を実装しています。シングルサインオンは完全に機能しますが、シングルログアウトは部分的にしか機能しません。ここではテストケースである:のwebapp1上WSO2とSpring SAMLの単一ログアウトの問題

  1. アクセスセキュアなリソース
  2. Idpの(WSO2)からログインページが提示され、ユーザがログインwebapp2を上
  3. アクセスセキュアなリソースを提示しているのwebapp1から
  4. セキュアな資源であり、
  5. SAML要求はwebapp2をから
  6. セキュアリソースが提示され、Idpのに送られたIDPは応答し、ユーザが認証されている、エンドSSO
  7. でitiateは、単一IdpのとSAML応答に(ブラウザ経由)SAML要求を送信webapp2を
  8. webapp2をからログアウトは
  9. ユーザーがwebapp2をとのIDPセッションでローカルにログオフされて返され
  10. を終了したIdPが直接のwebapp1にログアウト要求を送信します(バックチャネル型)
  11. ログアウト要求が(ログはSamlStatusExceptionを示している:ユーザーがログインしていない)のwebapp1に失敗し

だから最終的な結果は、私がまだのwebapp1上のローカルセッションを持っているということです。注文を変更してwebapp1からSLOを開始すると、webapp1はログアウトされ、webapp2のローカルセッションは引き続き存在します。 WSO2サーバーはSLO中に第2セッション参加者を決定することができますが、Idpから第2セッション参加者に送信されるHTTP要求にはSpringセキュリティコンテキストがありません。これはステートレスなHTTP要求なので、ログインしているユーザーはいません。これが失敗していると私が信じている理由です。

私はthisディスカッションを発見しました。その約2歳です。この問題に何か新しいことはありますか?おそらく、WSO2やSpring-samlの設定で私が見逃した設定ステップかもしれません。ここで

は私のSPのメタデータの関連する部分である:

<md:SingleLogoutService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SingleLogout" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"/> 
<md:SingleLogoutService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SingleLogout" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"/> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> 
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat> 
<md:AssertionConsumerService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/> 
<md:AssertionConsumerService Location="https://tpap10-wwwdev04.arbfile.org:443/webapp/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/> 

SP上のいくつかの関連する春のSAML設定:

<bean id="metadataGeneratorFilter" class="org.springframework.security.saml.metadata.MetadataGeneratorFilter"> 
<constructor-arg> 
    <bean class="org.springframework.security.saml.metadata.MetadataGenerator"> 
    <property name="entityId" value="urn:webapp1:mycity"/> 
    <property name="entityBaseURL" value="https://wwwdev04.domain.org:443/webapp" /> 
    <property name="extendedMetadata"> 
     <bean class="org.springframework.security.saml.metadata.ExtendedMetadata"> 
     <!-- <property name="signMetadata" value="false"/> --> 
     <property name="idpDiscoveryEnabled" value="false"/> 
     </bean> 
    </property> 
    </bean> 
</constructor-arg> 
</bean> 

答えて

1

WSO2が正しくSAML 2.0仕様を実装していませんでした。この仕様では、フロントエンドチャネル(=ユーザーのブラウザ経由)を使用してHTTP- *バインディングを使用したシングルログアウトが必要です。これにより、HTTPセッションが使用可能になり、Spring SAMLで正しく終了させることができます。この問題はWSO2では決して解決されなかったと私は信じています。

春SAMLでは、デフォルトでユーザーの状態を格納するためにHttpSessionが使用されます。これは、Spring SAMLがSOAPバインディングを使用した単一ログアウトをサポートしていない理由です。 Spring Securityセッションのアプリケーション全体のストレージを実装することは可能です。これはHttpSessionから独立して無効にすることができます(したがってWSO2の制限を回避することができます)。これはデフォルトでは設定されていません。

+0

こんにちはウラジミール、私はあなたが春の専門家であることがわかります。私の問題を助けてくれますか? – bob9123

関連する問題