1. ホーム
  2. security

[解決済み] SSOはCASかOAuthか?

2022-04-21 19:43:54

質問

を使うべきでしょうか? CAS プロトコルか OAuth + シングルサインオンを実現するための認証プロバイダです。

シナリオの例

  1. ユーザーが保護されたリソースにアクセスしようとしたが、認証されていない。
  2. アプリケーションは、ユーザーをSSOサーバーにリダイレクトする。
  3. 認証された場合、ユーザーはSSOサーバーからトークンを取得する。
  4. SSOは元のアプリケーションにリダイレクトします。
  5. 元のアプリケーションは、SSO サーバーとトークンを照合する。
  6. トークンに問題がなければ、アクセスが許可され、アプリケーションはユーザーIDを知ることができます。
  7. ログアウトを実行すると、接続されているすべてのアプリケーションから同時にログアウトされる(シングルサインアウト)。

私の理解では、それこそCASが発明された目的です。CASのクライアントが認証サービスを利用するためには、CASプロトコルを実装する必要があります。今、私はクライアント(消費者)サイトでCASを使うかOAuthを使うか迷っています。OAuthはCASのその部分を置き換えるものなのでしょうか?新しいデファクトスタンダードであるOAuthを優先すべきなのか?ユーザー名/パスワード、OpenID、TLS証明書...といった様々な方法をサポートするCASの認証部分を簡単に使える(Sun OpenSSOではない!)代替手段はあるのでしょうか?

コンテキスト

  • 異なるアプリケーションは、SSOサーバーの認証に依存し、セッションのようなものを使用する必要があります。
  • アプリケーションはGUIウェブアプリケーションまたは(REST)サーバーとすることができる。
  • SSOサーバーはユーザーIDを提供しなければなりません。これは、ロール、電子メールなどのユーザーに関する詳細情報を中央のユーザー情報ストアから取得するために必要なものです。
  • シングルサインアウトが可能であること。
  • ほとんどのクライアントはJavaまたはPHPで書かれています。

私はちょうど WRAPを発見 OAuthの後継となる可能性があります。これは、Microsoft、Google、Yahooによって指定された新しいプロトコルです。

補遺

OAuthは認証のために設計されたものではないことを知りました。SSOの実装には使えますが、OpenIDのようなSSOサービスとの組み合わせに限られます。

OpenIDは、新しいCASのような気がします。CASにはOpenIDにない機能(シングルサインアウトなど)もありますが、特定のシナリオで足りない部分を追加するのはそれほど難しくはないはずです。OpenIDは広く受け入れられており、アプリケーションやアプリケーションサーバに統合するのが良いと思う。CASもOpenIDをサポートしていることは知っていますが、OpenIDがあればCASは不要だと思います。

どのように解決するのですか?

OpenIDはCASの「後継」でも「代替」でもなく、意図も実装も異なるものです。

CAS 一元化 の認証を行います。すべての(おそらく内部の)アプリケーションで、ユーザーに1つのサーバーへのログインを求める場合に使用します(すべてのアプリケーションが1つのCASサーバーを指すように設定されます)。

OpenID 分散化 の認証を行います。もしあなたのアプリケーションが、ユーザーが望む認証サービスにログインするのを受け入れたいなら、これを使いましょう (ユーザーはOpenIDサーバーのアドレスを提供します - 実際、'username'はサーバーのURLとなります)。

上記のいずれも、(拡張やカスタマイズをしない限り)認可を処理しません。

OAuthは認可を処理しますが、従来の'USER_ROLESテーブル'(ユーザーアクセス)の代わりではありません。サードパーティの認可を処理します。

例えば、アプリケーションをTwitterと連携させたいとします。ユーザーがデータを更新したり、新しいコンテンツを投稿したりすると、自動的にツイートするように許可することができます。ユーザーの代わりにサードパーティのサービスやリソースにアクセスしたい場合、ユーザーのパスワードを取得する必要はありません(これは明らかにユーザーにとって安全ではありません)。アプリケーションがTwitterにアクセスを求めると ユーザー Twitterを通じて)承認すると、アプリがアクセスできるようになります。

つまり、OAuthはシングルサインオンのためのものではありません(CASプロトコルの代用品でもありません)。また あなた ユーザがアクセスできるものを制御すること。それは ユーザー を制御することができます。 その のリソースが第三者によってアクセスされる可能性があります。この2つは全く異なる使用例です。

あなたのおっしゃる文脈では、CASはおそらく正しい選択でしょう。

[更新しました】。]

とはいえ、ユーザーのIDをセキュアなリソースと考えれば、OAuthでSSOを実装することは可能です。Sign up with GitHub」などは、基本的にこれを実現しています。おそらくプロトコルの本来の意図とは異なりますが、実現することは可能です。OAuthサーバーをコントロールし、アプリがそのサーバーで認証することだけを制限すれば、それはSSOです。

強制的にログアウトさせる標準的な方法はありませんが(CASにはこの機能があります)。