36

警告!私はここでちょっとした釣り旅行をしているのですが、私がしている質問が完全に意味を成すかどうかさえわかりません. 親切に対応してください!:)

私は最近、現在 Java + Linux + Tomcat + MySQL に基づいているプロジェクトを引き継ぎました。現在、システムは基本的に、バックグラウンドでいくつかのデータを移動するためのいくつかの cron ジョブを備えた単なる Web サイトです。サービス指向アーキテクチャ (SOA <-- バズワード警告!) の開発を開始する必要があり、最終的には Web サーバーとアプリケーション サーバーが混在することになります。注: Glassfish v3 への移行を強く検討しています。

現在、認証と承認は Java コードで処理され、ユーザー情報は MySQL データベースに保存されます。最低限、これを別の認証サービスに分割する必要があるように思えます (そうしないと、ユーザー認証と承認を処理するためにあちこちに重複したコードがたくさんできてしまいます)。

私は、シングル サインオン (SSO)タイプのソリューションを調査し、いくつかの調査を行ってきました。私が収集した情報によると、OpenSSO は Oracle によって正式に廃止されましたが、ForgeRock によって取り上げられ、現在は OpenAM と呼ばれています。これは私が望むものに非常に近いように見えますが、私はすでに MySQL ベースのシステムを持っているので、それをサポートするもの (または他の種類の RDBMS) を使用したいと考えています。私はこれを Stack Overflow で見つけましたが、基本的に LDAP か何もないことを示しているようです。

認証と承認のために OpenSSO/OpenAM をデータベースと通信させる方法はありますか?

私の質問は次のとおりです。

OpenSSO/OpenAM には他にどのようなオプションがありますか? LDAP は進むべき道ですか? 注: 「OpenAM 対」Google 検索を実行しても、多くは得られません。人々はただ「自分自身を転がす」傾向がありますか?

私を教育するのに役立つこのトピックに関する考え/提案/リンクは大歓迎です. ご理解とご協力をよろしくお願いいたします。

4

7 に答える 7

100

既存のアプリケーションを統合していますか、それとも独自のアプリケーションをサポートしたいだけですか?

実際の SSO をお探しですか、それとも単に共有資格情報をお探しですか? SSO は単一のアプリケーションにログインし、その資格情報を別のアプリケーションに伝達します (Gmail にログインして Blogger に自動的にログインするなど)。共有資格情報は、アプリケーション間で同じログイン名とパスワードを使用できますが、資格情報自体は自動的に伝達されません。

LDAP は、共有資格情報の管理に使用される一般的なシステムです。多くのシステムでは、認証ストアを既存の LDAP サーバーに向けることができます。

たとえば、Java EE コンテナに複数のアプリを展開し、さらに電子メール サーバーと Web ベースの電子メール クライアントを展開している場合、これらの多様なアプリケーションのすべてが同じ LDAP サーバーを指すことができ、ユーザーは単一のログインを持つことになります。すべての異なるシステムのパスワード、すべて異なる言語で記述され、すべて異なるマシンに展開されます。これは LDAP のパンとバターの使用例であり、ほとんどすべてのシステムがこれをすぐに処理できます。Glassfish と Tomcat はどちらも、LDAP サーバーに対して容易に検証できます。Apache (Web サーバー)、Postgres (データベース)、Postfix (電子メール) なども同様です。

したがって、単純に共有資格情報が必要な場合は、LDAP サーバーをインストールすることで、今すぐ「無料で」取得できます。LDAP は DBMS のようなものとは少し異なりますが、少し勉強して「理解」すると、非常に便利です。OpenLDAP は一般的な LDAP サーバーですが、私は ApacheDS が好きです。

それをJava EEコンテナに設定する方法は、「レルム」を設定することです。GF と Tomcat は両方とも、すぐに使用できる LDAP レルムを備えています。ただし、Realm を利用するには Java EE セキュリティを使用する必要があります。

ほら、Java EE Realm の詳細は、それがアプリケーションではなく、CONTAINER の側面であるということです。接続プールが、アプリケーションが活用するコンテナー リソースであるのと同じように。ほとんどの人は、セキュリティをアプリケーションの一部にしたいと考えており、セキュリティをより制御できると感じています。

さまざまなアプリケーションの束を取得し始め、すべての人が別々に構成され、個別のユーザー リストやパスワード ポリシーなどを持つまでは、これで問題ありません。

LDAP は、同じ資格情報ストアを使用するようにすべてを構成するため、その多くを修正できます。

Realm は、Java EE サーバーのニーズを満たします。アプリケーションは、コンテナーによって提供される Realm を使用するように構成されています。複数のアプリケーションと 1 つのレルムがある場合、それらはすべてそのレルム内で資格情報を共有できます (レルム タイプに関係なく)。

レルムは、ファイル ベース、データベース ベース、LDAP など、何でもかまいません。コンテナ クラスタの場合、レルムもクラスタ化されます (これは便利です)。

Java EE セキュリティの暗い側面と、ほとんどのアプリがそれを回避する理由は、繰り返しになりますが、Realm はアプリケーションではなくコンテナーの一部であるため、使用するのが少し不格好であり、おそらく必要な機能を提供しない可能性があるためです。ユーザー管理、パスワードポリシーなどに関して。

しかし、Java EE セキュリティの明るい面は、その傘下に入ると、資格情報をコード全体で簡単に活用できることです。ユーザーが Web サイトにログインすると、その資格情報を Web アプリで使用したり、EJB 層 (リモート EJB 層) に自動的に伝播したりできます。情報は常に便利です。

Web アプリケーションをレルム、EJB、Web サービスに向けることができます。それらはすべて同じ部分を活用しています。

両方の長所を活かすには、コンテナー固有のメカニズムを活用してコンテナーのセキュリティにアクセスします。これは、Java EE セキュリティのもう 1 つの暗い側面です。

Realms のようなものや、コンテナー セキュリティへの直接アクセスは、コンテナー間で移植できません。GF と Tomcat は、WebLogic とは異なります。すべて非常に似ていますが、詳細が異なるため、コードをシームレスに移植することはできません。

明るい面は社内アプリの場合です。ほとんどの人は、自分が持っているコンテナーを活用し、コンテナーに依存するコードの周りに合理的な抽象化を配置し、そうです、別のアプリに移動する場合はこれを移植する必要があることに注意して、それを一日と呼びます。容器。しかし、実際には。データベースと同じように、コンテナ プラットフォームが選択されると、人々はそれにぴったりと寄り添い、それに固執する傾向があります。

最後に、サーブレット 3.0 (GF3 および Tomcat 7) では、プログラムによるログインの問題を標準化し、コンテナー間での移植性を高めていますが、基本的な概念は同じです。

さて、SSO。

SSO は別の獣です。しかし、門の外では、GF と Tomcat の両方が Web アプリの SSO をサポートしています。これにより、1 つの Web アプリにログインし、他のアプリにログインしなくても簡単にアクセスできるようになります。ただし、SSO は、アプリケーションの制御下にあるより柔軟なものではなく、コンテナーのセキュリティとそのライフサイクルに大きく依存しているため、少し制限があります。Realms (これは当然のことです) だけでなく、カスタム プログラムによるログインではなく、実際のコンテナ ベースの FORM ログインにも注意してください。FORM ログインは目を見張るものではありませんが、機能的で機能します。Realm を実装し、アプリを Tomcat または GF の単一インスタンス (または GF 3.1 のクラスター) にデプロイすると、無料で SSO を取得できます。バック オフィス アプリケーションのユーザビリティは問題ありませんが、おそらく公共のインターネットではそうではありません。

より洗練された SSO ソリューションが必要な場合は、カスタム実装を検討する必要があります。OpenSSO はその 1 つで、SAML と SAML Web プロファイルに依存しています。ただし、他にもあります。CAS、Atlassian Cloud、Kerberos、および OAuth もあります。これらはすべて、SAML とは異なるプロトコルを使用しています。SAML に固執したい場合は、Shibboleth や SimpleSAML を検討することもできます (SimpleSAML は、とりわけ SAML ID プロバイダーとして機能する PHP サーバーですが、アプリケーション内にサービス プロバイダーが必要です)。

どのプロトコルを選択しても、プロセスは基本的に同じです (詳細はこちら --クロス ドメイン ログイン - あるドメインから別のドメインに転送されたときにユーザーを自動的にログインする方法)。

しかし、悪魔は細部に宿ります。そして、男の子、悪魔はいますか。

これらのシステムはすべて複雑です。SSO は複雑です。たとえば、シングル サイン オンを使用できるようになったので、シングル サイン アウトはどうでしょうか。シングルタイムアウトはどうですか?ユーザーがログインしている間の資格情報の変更はどうなりますか? Web サービスの STS (Secure Token Service) はどうですか? (STS は、Web サービスに対して同様の委任認証メカニズムを提供します。)

SAML は、非常に多くの新しい語彙と多くの構成を紹介します。ドキュメントは優れたものではなく、より高いレベルの一般的なものについて話す標準ドキュメントに大きく依存しているため、簡単には取り上げられません。

本当に必要な SSO が必要ない場合は、中央の LDAP ストアのようなもので満足し、そこから先に進むことができます。

例として、私たちのアプリケーションは DB と LDAP バックエンドの両方をサポートしています。Glassfish と Java EE セキュリティを使用しています。ユーザーエクスペリエンスを完全に制御します。また、SAML 経由の SSO もサポートしています (独自の ID およびサービス プロバイダーを作成しました)。また、コードとサード パーティ コードを使用して、LDAP と SSO を介して Java および他のアプリケーション間で資格情報を共有しています。明るい面は、これがすべて標準ベースであることです。欠点は、標準が英語で伝達され、英語が解釈されることです。

私はこれを単にそれができると言うために言います。シンプルなサーブレット フィルターを使用して、ナプキン SSO 実装の裏で、同じドメインとクロス ドメインの両方 (同じドメインは共有 Cookie でシンプルです) のアドホックも作成しました。パスワード ポリシー、パスワードの回復、キープ アライブ タイマー、複数ウィンドウのタイムアウトとセッション管理 (これはすごいことです)、役割、特権など。

また、Spring と、Spring の上にこれらすべてを提供する Spring Security については触れません。私はそれを使用したことはありません (私は Spring の人ではありません) が、それらの人々は自分が何をしているかを知っているので、一見の価値があります。

于 2011-10-29T07:12:53.147 に答える
3

「 OpenSSO/OpenAMに認証と承認のためにデータベースと通信させる方法はありますか?」という表現は間違っていることに注意してください。質問の詳細と回答は、承認の側面のみを扱います。OpenAMは、ユーザーとパスワードのMySQLデータベース(認証)とうまく連携し、ポリシーやその他の設定を保存するために、非表示/埋め込みのLDAPサーバーを使用できます。

まだセキュリティモデルを具体化する必要があるように思えますが、OpenAMのようなものはまったく必要なく、コンテナ/フレームワークが提供するセキュリティを使用するだけでよいことに気付くでしょう。

于 2011-10-19T19:47:14.077 に答える
0

RDBM で OpenAm を使用できます。OpenAm で JBDC ベースのユーザー ストアを使用しています

于 2011-10-29T05:14:44.970 に答える
0

OpenAM には、ユーザーとそれに付随するすべてのプロパティが格納されるユーザー ストアと、構成を保持する構成ストアの 2 つの別個のストアがあります。OpenAM で利用できるデータベース User Store がありますが、試したことはありません。あなたが指摘していた SO の質問は、主に構成ストアに言及していましたが、これは LDAP のみですが、OpenAM に組み込まれています (直接管理は必要ありません)。

個人的には、Glassfish よりも Tomcat のファンです。これは高速で軽量なサーブレット コンテナーであり、完全な J2EE コンテナーに伴う膨張がまったくないためです。

于 2011-10-12T09:16:15.237 に答える
0

OpenAm のカスタム ユーザー リポジトリの構築に成功しました。この質問はしばらくアクティブになっておらず、ここでその方法を詳しく説明するには長すぎるため、いくつかのヒントを示します。詳細についてサポートが必要な場合は、お気軽にお問い合わせください。

  • 基本的なエントリ ポイントは、com.sun.identity.idm.IdRepo を拡張する必要があります。
  • ssoadm.jsp?cmd=add-sub-schema を使用して、カスタム リポジトリを登録する必要があります。

この時点から、レルムのデータ ストアを作成するときに、リポジトリ タイプが他のタイプのリストに表示されます。

幸運を !

于 2015-06-29T20:00:21.590 に答える
0

OpenAM には、独自の認証モジュールをプラグインする機能があるようです。

おそらく、AMLoginModule の拡張内から DB 呼び出しを行うことができます。

于 2011-11-03T17:21:52.503 に答える
0

This list might provide a good starting point:

http://en.wikipedia.org/wiki/List_of_single_sign-on_implementations

with JOSSO and Shibboleth springing to mind.

于 2011-10-11T19:27:21.660 に答える