1

CAS がどのように機能するのか疑問に思っています (ワークフローが必要です)。想像:

  1. ユーザーは、App1 (example.com/app1 など) で CAS を使用して認証します。
  2. ユーザーは別のアプリケーション (example.com/app2) に移動します。

すべてのアプリケーションは、ページの上部にユーザーの名前を表示する必要があります。彼らはどのようにそれを知っていますか?1 つのアプリケーションのみの場合、ワークフローは非常に明確です。

  1. App1: ユーザーが認証なしでページを閲覧している間、「ログイン」リンクをユーザー名として表示するだけです。
  2. App1: ある瞬間、ユーザーがログインを押します。
  3. App1: ユーザーを CAS にリダイレクトします
  4. CAS: ユーザーのログイン/パスを要求します
  5. CAS: ユーザーがログイン/パスを入力
  6. CAS: ユーザーを App1 にリダイレクトします。
  7. App1: CAS からトークンとユーザー名 (または ID) を取得し、このユーザーにいくつかの権限を付与します。終わり。

しかし今: App2 (App3 など) は、ユーザーが既に認証されていることをどのように認識するのでしょうか? ユーザーがすでに認証されており、自分の名前を要求しているかどうかを知るためだけに、すべてのページから CAS にユーザーをリダイレクトする必要がありますか?

Spring の場合、次のような独立したアプリケーションがいくつかありますが、それは巨大なリダイレクトになります。

example.com/App1
example.com/App2
...
example.com/AppN
4

3 に答える 3

1

CASを使用するということは、CASサーバーがグローバルに認証されたユーザーを追跡することを意味します(チケット許可チケットID-TGTを格納するCookieを使用)。各アプリケーションは、主要なセッションと対応する情報を追跡するための独自のメカニズムを維持する必要があります。

したがって、ユーザーがセキュリティで保護されたアプリケーションAPP1にアクセスしたい場合(認証されていない場合)、ユーザーはCASサーバーにリダイレクトされます。有効なTGTを送信しないと、ログインフォームが表示されます。そうでない場合(またはCASサーバーへの認証に成功した後)、サービスチケット(ST)が生成され、APP1に表示する必要があります。ここで、このサービスチケットはCASサーバーに対して検証されます(サーバー間通信を使用)。有効な場合は、userId(および場合によっては追加情報)が返されます。これで、userIdに基づいてプリンシパルを作成し、承認情報を提供するのはアプリケーションAPP1次第です(たとえば、CAS-ServerはLDAPに対して認証しますが、APP1はユーザーデータをデータベースに保存します)。APP1への後続のすべての要求には、CASサーバーが関与しないようにする必要があります。

ユーザーがAPP2にリクエストを送信すると、上記のプロセスが再開されます。

于 2012-09-27T20:17:27.163 に答える
0

同期、

質問を cas-users [cas-user@lists.jasig.org] メーリング リストに投稿してみましたか?

私は過去 6 か月間 CAS を使用してきましたが、私が理解していることから、App2 (App3 など) は、CAS へのリダイレクトなしでは、ユーザー属性を知る方法がありません。

Web セッションとともにユーザー属性を保存するか、ログイン名を表示するページに iframe-header を埋め込むことで、App2 のすべてのページを CAS フィルターの背後に置くことを避けることができます。

CAS の寄稿者である Marvin は、GitHub で優れた CAS クライアント テスト Web アプリを管理しており、ユーザー属性をどのように読み取るかを確認できます。 https://github.com/serac/java-cas-client-test

于 2012-09-24T05:32:14.067 に答える