7

私のアプリケーションは、別のサーバーで実行されている RESTful Web サービスにアクセスする必要があります。この Web サービスは CAS 認証を使用しており、ブラウザーを介して使用すると、ユーザーがまだ認証されていない場合は CAS ログインにリダイレクトされます。CAS から実際にログインする方法はありません。私のアプリケーションも CAS を使用しているため、ユーザーは認証されます

JQuery/Ajax を介してアクセスしたいのですが、サーバーが JSONP 用に構成されていないようです。これは、クロスドメインの問題のために不可欠であると理解しています。

ここで、代わりにサーバー経由で Ajax リクエストを行うことができますが、これは私の質問につながります: サーバーが呼び出す CAS ログイン メソッドがない場合、ユーザーが認証されていることを Web サービスに「伝える」にはどうすればよいでしょうか?

そのため、最初に、ブラウザー、CAS、および RESTful サービスの間で何が起こっているのか、また資格情報を明示的に渡すことなく承認がどのように処理されるのかを明確にしたいと思います。第二に、サーバーからサービスを呼び出すときにそれをどのように複製できるかを確認したい-ブラウザーからの要求と同じセッションではないため、CAS認証トークンはありませんが、私はしません取得または提供する方法を参照してください。

4

2 に答える 2

7

認証/シングル サインオンのしくみに関する質問 1 について:
CAS サーバー (security.example.com など) にログインすると、ブラウザーにドメイン security.example.com の Cookie が設定されます。標準の CAS 認証と検証フィルターを使用して、アプリケーションのブラウザーから保護されたファイルにアクセスする場合の一般的なフローは次のようになります。

  1. アプリケーション用に構成された CAS 認証フィルターは、ユーザー オブジェクトがセッション中であるかどうかを確認します。はいの場合、ユーザーは通過します
  2. そうでない場合、CAS 認証フィルタはブラウザを CAS ログイン ページにリダイレクトします。シングル サインオンのシナリオでは、CAS サーバーは独自の Cookie を認識し、アプリケーションが登録されていて、シングル サインオンに参加しているかどうかを確認します。
  3. アプリケーションで構成された CAS 検証フィルターは、サービス チケットを識別し、チケットを検証してアサーション オブジェクトを作成するために CAS サーバーに接続します

このフロー全体が機能するには、Cookie とセッション処理が機能する必要があります。

サーバー側で認証を処理する方法に関する質問 2 について:
アプリケーションで同様の問題が発生し、2 つの異なる方法を使用して回避しました。

  1. 内部システム ユーザーを使用し、基本認証ヘッダーを使用してこのユーザーの資格情報を渡すサーバー間アクセスを実行します。もちろん、基本認証トークンを使用した非対話型ログインを処理するには、適切なフィルターを構成する必要があります。これは簡単に実装できますが、この特別なシステム ユーザーがいる、アプリケーションがユーザーのパスワードを参照するなどの明らかな欠点があります。
  2. プロキシ認証を使用します。このアプローチでは、ユーザーが application1 に対して認証されると、application2 (サーバーからサーバーへの呼び出し) で使用されるプロキシ チケットも生成されます。このプロキシ チケットは、サーバー間通信で渡すことができるため、application1 はユーザーに代わって application2 にアクセスできます。
于 2013-07-16T08:04:16.993 に答える