20

oldApp.warとnewApp.warがデプロイされたTomcat7セットアップがあります。両方のアプリケーションは、データベース上のユーザーに対して同じログイン資格情報を共有します。

https://localhost/oldAppそれぞれとを使用してアプリにアクセスできますhttps:localhost/newApp

私のoldAppはSpringMVCJavaアプリケーションであり、ユーザーがoldAppにログインしたときに、ログイン資格情報を要求せずにユーザーをnewAppに誘導するリンクが必要です。

これを行うためにSSOを実装する方法を知りたいです。私はできれば、これを処理するために外部サービスを実行したくありません。

前もって感謝します。

4

4 に答える 4

12

更新:2018年以降の情報は古くなっています。新しいアプリケーションを開始する場合は、Open ID ConnectなどのフェデレーションIDプロトコルを使用すると、SSOを無料で入手できます。

あなたが取ることができるいくつかのアプローチがあります:

  1. 認証にTomcatを使用し、Tomcatのシングルサインオン機能を使用できます。現在Springを使用してユーザーを認証している場合は、いくつかの変更が必要になる場合があります。また、認証の方法によっては、Tomcatの認証を十分に構成できない場合があります。
  2. 両方のWebアプリケーションが認証する3番目のCASサーブレット(または同様のもの)をセットアップできます。
  3. Springと事前認証されたフィルターを使用して、これを自分で設定できます。基本的に、古い認証方法にフォールバックする前に、両方のサーブレットがアクセスできる場所(データベース?、共有コンテキスト?)で既存の資格情報をチェックする独自の事前認証フィルターを作成する必要があります。次のリクエストが前のリクエストのクレデンシャルを自動的に継承しないように、フィルターのどこかでこの認証をクリアするようにしてください。
于 2013-02-19T13:10:02.490 に答える
9

SSOはさまざまな方法で実装できます。

  1. Oauth 2- http: //oauth.net/2/
  2. SAML 2- https://www.oasis-open.org/committees/tc_home.php? wg_abbrev=security

SAML 2.0には、ID/サービスプロバイダーの役割のための多くの実装があります。

IDP実装リストについては、このstackoverflowの投稿を参照できます: https ://stackoverflow.com/a/761774/126414

サービスプロバイダーの実装を計画している場合は、優れたSpring拡張機能があります: http ://static.springsource.org/spring-security/site/extensions/saml/index.html

于 2013-02-19T13:17:37.453 に答える
4

私はTomcatのSSOバルブでこれを管理しました:

  1. server.xmlファイルのホスト(localhost)要素内にSSOバルブを配置します。

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> </Host>

  2. ユーザーと役割を追加します(例:でtomcat_users.xml):

    <user username="user1" password="user1" roles="employee"/>

  3. web-appアプリのファイルの要素に、セキュリティweb.xml制約を追加します。

    <security-constraint> <web-resource-collection> <web-resource-name>App name</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>employee</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <realm-name>file</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>employee</role-name> </security-role>

  4. それでおしまい。ここで、いずれかのアプリにログインすると、他のアプリにログインする必要があります。

もちろん、本番環境ではプレーンテキストのパスワードを使用しないでください。これは簡単な例です。ダイジェスト認証と、TomcatでのSSLの構成を検討する必要があります。

これが誰かに役立つことを願っています!

PSユーザーをSQLデータベースに保存する場合は、この回答の下にある私のコメントを確認してください。

于 2017-12-07T13:08:48.837 に答える
3

CASサーバー(これは戦争に他なりません)をTomcatにデプロイし、それに応じてWebアプリのフィルターを構成できます。あなたはこのリンクから助けを得ることができます。

于 2013-05-30T12:31:16.397 に答える