web-dev-qa-db-ja.com

既存のTomcat WebアプリケーションにSSOを実装する方法

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

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

私のoldAppはSpring MVC Javaアプリケーションであり、ユーザーがoldAppにログインすると、ログイン資格情報を要求せずにユーザーをnewAppに移動するリンクが必要です。

これを行うためにSSOを実装する方法を知りたいです。これを処理するために外部サービスを実行したくないのが望ましいです。

前もって感謝します。

18
Qstacker

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には、Identity/Serviceプロバイダーロールの多くの実装があります。

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

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

7
svlada

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

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

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

CASサーバー(これは戦争に過ぎません)をTomcatにデプロイし、それに応じてWebアプリのフィルターを構成できます。この link からヘルプを得ることができます。

3
somaniA

私はTomcatのSSO Valveでこれを管理しました:

  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を設定する を考慮する必要があります。

これが誰かを助けることを願っています!

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

3
akelec