2017-07-20 24 views
1

私たちは春のセキュリティsamlで保護されているアプリケーションに取り組んでいます。SAMLException:応答のInResponseToFieldが送信されたメッセージに対応していません

認証は正常に機能しますが、運用環境では次のワークフローに1つの問題があります。

  1. ユーザが保護されていないアドレスwww.server.com
  2. 応答はwindow.location.href SAML保護されたページ(サービスプロバイダ)www.server.com/に変化インラインスクリプトとHTMLページですを要求しますアプリ/アクション?のparam1 = VALUE1 & PARAM2 = value2の
  3. スプリングSAMLは、ログインフォームを認証が必要とされていることを検出し、この時点でwww.login-server.com
  4. 上のログインフォーム(アイデンティティプロバイダ)にユーザーをリダイレクトユーザーに表示される最初のページです。
  5. u SERはwww.login-server.com/adfs/ls/?SAMLRequest=xxx & SigAlg = xxxは&署名= arGdsZwJtHzTDjQP1oYqbjNO
  6. ユーザーがアプリケーションで動作します(このHTTPセッション用のSAML関連URLのparamsを含む)、ブックマークとして、このログインページが追加されます...次の日に
  7. は、ユーザがこのブックマークと
  8. のIdPがSPにリダイレクトしますが属するHTTPセッションがすでに

は、今、私たちは私たちのアプリケーションでは、次の例外を取得期限が切れたログインを開きます。

org.opensaml.common.SAMLException:レスポンスのInResponseToFieldは、ユーザーがログインに成功した後にアプリケーションを使用できるように、このワークフローを処理する方法を

任意のアイデアarGdsZwJtHzTDjQP1oYqbjNO送信されたメッセージに対応していませんか? あなたの答えをありがとう!

答えて

0

私たちは春のSAMLの設定を以下のように変更して私たちの問題を解決した:

我々は(すべてのリクエストパラメータを含む)我々のアプリケーションの初期化アクションにdefaultTargetUrlを設定したID successRedirectHandlerorg.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler)を持つBeanでは
  1. 。このURLは、IdPによって開始されたSSOの場合に自動的に使用されます。
  2. idがcontextProviderorg.springframework.security.saml.context.SAMLContextProviderLB)のBeanではstorageFactoryをorg.springframework.security.saml.storage.EmptyStorageFactoryに設定しました。これにより、InResponseToFieldのチェックが無効になります。
2

あなたがアプリケーションを生成したときにAuthnRequestが生成されたとき、リクエストにはアプリケーションが何らかの形で保持するIDがあります。 IdPの対応する応答には、InResponseTo属性が同じID値に設定されている必要があります。これにより、アプリケーションは、送信した要求に対する応答であることをアプリケーションが確認できるようになります。

しかし、ユーザーがリクエスト(www.login-server.com/adfs/ls/?SAMLRequest=xxx ...)を含むadfsリンクをブックマークしたとき、アプリケーションはその要求を完全に忘れていました。換言すれば、それはもはや要求IDをどこかに保持せず、応答を検証することができなかった。

解決策は、ではなく、にwww.login-server.com/adfs/ls/?SAMLRequest=xxx ...リンクをブックマークすることです。代わりに、アプリケーションで新しい要求を生成してADFSに送信できるリンクをブックマークする必要があります。

関連する問題