3

Spring Security を使用して、既存の (非常に「レガシー」な) シングル サインオン ソリューションを使用して新しい Spring MVC アプリケーションを保護しようとしているときに、いくつかの問題が発生しています。

免責事項:私は Spring 全体に比較的精通していますが、Spring Security にはまったく精通していません。私の無知を許してください。

SSO サービスは次のように機能します。

  1. ユーザーは、選択した Web アプリに移動します: http://apps.myco.com/webapp123
  2. ユーザーは認証されていないため、http://sso.myco.com/loginにリダイレクトされ、ログインするように求められます。
  3. ユーザーは認証され、クエリ文字列にトークンが添付されたアプリに戻されます: http://apps.myco.com/webapp123?token=ABCD1234
  4. 各ページの読み込み (現在は JSP ページ) で、ユーザーのトークンがクエリ文字列から取得され、SOAP コールを介して SSO サービスに返され、トークンの有効性が確認されます。SSO サービスは、トークンの賛成または反対を示しま​​す (トークンが有効で最新の場合は賛成、そうでない場合は反対)
  5. トークンが有効な場合、別の SOAP 呼び出しを行ってユーザー名を取得できます (必要な場合)。

SSO サービスは認証用のユーザー資格情報を処理しないため、アプリケーションごとに処理する必要があります:(

私が理解しているように、ここで一般的に受け入れられている方法は、Spring Security の事前認証フレームワークを使用することですが、(a) その仮定が正しいかどうか、(b) 付属のすべてが必要かどうかはわかりません。その解決策。

現在、LoginUrlAuthenticationEntryPoint認証されていないユーザーを SSO サイトに誘導する Bean を定義しています。

<beans:bean id="customAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
    <beans:constructor-arg value="http://sso.myco.com/login" />
</beans:bean>

エントリ ポイントは次のように配線されます。

<http use-expressions="true" entry-point-ref="customAuthenticationEntryPoint">
    <intercept-url pattern="/" access="permitAll" />
    <intercept-url pattern="/edit/**" access="isAuthenticated()" />
    <intercept-url pattern="/setup/**" access="hasRole('setup')" />
    <intercept-url pattern="/admin/**" access="hasRole('admin')" />
</http>

私にとっての難点は、SSO サービスから「コールバック」を受信するためにどこに接続するかです。私が望むのは、SSO サービスからこれらのリダイレクトを受け入れ、トークンを検証し、SSO からユーザー名を取得するURL (たとえば、 http://apps.myco.com/webapp123/auth?token=ABCD1234 ) を持つことです。 、次にそのすべての情報を Spring Security コンテキスト内に保存します。ただし、私が間違った道を進んでいる可能性は十分にあります。

どんな助けや指導も大歓迎です。

4

2 に答える 2

0

トークンの有効性とユーザーの詳細に基づいてロール (セットアップ、管理者など) を割り当てるカスタム Voter を実装することをお勧めします。Voting-Based AccessDecisionManager Implementationsとそこで参照されているブログを参照してください: SPRING SECURITY CUSTOMIZATION (PART 2 – ADJUSTING SECURED SESSION IN REAL TIME)

于 2012-05-30T14:12:19.847 に答える