4

私たちは、UI Web モジュール (Spring MVC) (クライアント) と RESTful サービス Web モジュール (CXF) (サーバー) を使用して、グリーン フィールド プロジェクトのセキュリティを設計しており、同じ Websphere アプリ サーバーに個別の war ファイルとしてデプロイされます。システムは Spring Security で保護し、LDAP に対して認証し、データベースに対して承認する必要があります。私たちは、2 つのアプリ間でセキュリティ コンテキストを共有するための最適なソリューションを探していました。これにより、ユーザーは Web UI で認証し、セキュリティで保護された RESTful サービスへの AJAX 呼び出しを呼び出すことができます。見つかったオプション:

  • OAuth: 私たちの要件に対してやり過ぎのように思われ、かなり複雑な認証プロセスを導入し、いくつかのエンタープライズ統合の問題が報告されています

  • CAS: エンタープライズ SSO ソリューションのセットアップに相当するものであり、私たちの関与の範囲を超えています

  • Spring Security では推奨されていませんが、コンテナベース (Websphere) のセキュリティであり、これが特定のニーズに対するソリューションを提供できるかどうかは明確ではありません

より簡単な解決策を探しています。2 つのアプリ間でセキュリティ コンテキストを伝播するにはどうすればよいですか? RESTful サービスがルックアップできるように、UI Web アプリに認証を実装してから、DB にセッションを保持する必要がありますか? CXF はソリューションを提供できますか? 渡すことができる「セキュリティトークン」の生成に関する多くのスレッドを読みましたが、これをSpring Securityで正確に行うにはどうすればよいですか?それは十分に安全ですか?

感想やアドバイスお待ちしております。

4

1 に答える 1

1

UI Web モジュールで認証されたユーザーに代わって、サーバー上で REST Web サービスを実行できるようにする必要があります。あなたが説明した要件は、SingleSignOn と呼ばれていました。これを行う最も簡単な方法は、REST WS 呼び出し中にユーザー名を含む HTTP ヘッダーを渡すことです。(REST クライアントがそれを許可してくれることを願っています)。安全な方法で行うには、次のいずれかを使用します。

  1. ユーザー名を REST クライアントで暗号化し、REST サーバーで復号化する
  2. ヘッダーがローカル ホストから送信されていることを確認します (アプリケーションが同じコンテナーにデプロイされているため)。

したがって、LDAP に対して SpringSecurity 認証を使用して両方のアプリケーションを保護します。最初のアプリケーション (Rest Client) では、通常のフォーム認証を使用します。2 番目のアプリケーション (Rest Server) では、独自のものを追加しますPreAuthenticatedProcessingFilter-single.html#d0e6167

編集済み

「認証」は、プリンシパルの身元を確認するプロセスです。この場合、REST クライアント (Spring MVC アプリケーション) と REST サーバー (CXF アプリケーション) の両方が LDAP に対して ID を検証します。LDAP は OK か Not かを「言います」。LDAP はユーザー リポジトリです。これはステートレスであり、以前の状態を覚えていません。アプリケーション内に保持する必要があります。

私の理解によると、ユーザーは REST サーバーに直接アクセスすることはなく、ユーザーは常に REST クライアントにアクセスします。したがって、ユーザーが REST クライアントにアクセスするとき、ユーザーはユーザー名とパスワードを提供し、REST クライアントは LDAP に対して認証されます。したがって、REST クライアントが REST サーバーにアクセスすると、ユーザーは認証され、REST クライアントはユーザーの名前を認識します。

そのため、リクエストがユーザー ヘッダー名を使用して REST サーバーに送信された場合、REST サーバーはユーザーが認証されたことを確実に認識しており、LDAP に対して再度認証する必要はありません。(ヘッダーは、上記のように安全な方法で渡す必要があります)。Rest サーバーは、ユーザー名を使用して LDAP にアクセスし、ユーザー パスワードを提供せずに関連するユーザー情報を収集する必要があります (ユーザーは既に認証されているため)。

于 2013-04-23T05:51:39.837 に答える