web-dev-qa-db-ja.com

CAS vs. SAML vs. OAuth2

宿題をせずにあまりにも基本的な質問をすることで私をputめる前に、私はこれらのトピックについて多くの本を読んでいると言いたいのですが、私はまだ混乱しています。

私のニーズは十分にシンプルに思えます。私の会社には、Ruby on Railsアプリケーション。すべてのアプリケーションが使用するSSO認証サービスを構築したいと考えています。

これを行う方法について調査を試みて、CASSAML、およびOAuth2について読みました。 (OAuthの「Auth」は認証ではなく認証を表していることは知っていますが、認証のためにOAuth罰金- this はそのうちの1つです)

誰かがこれら3つが何であるかを簡単な言葉で教えてもらえますか?彼らは代替(競合)ですか?それらを比較することさえ正しいですか?

そして非常に多くの宝石があり、それらはすべて非常に似たようなことを言っているようです:

私は別のRails他のアプリのすべての認証を処理するアプリケーションRailsアプリ。

注:ユーザーがGoogle/Facebookアカウントを使用してログインすることを許可しません。ユーザーは既にサイトにアカウントを持っています。一度そのアカウントを使用してログインし、再度サインインすることなくすべてのアプリにアクセスできるようにしたいのです。アプリでログアウトすると、すべてのアプリからログアウトするはずです。

[〜#〜] update [〜#〜]

私はこれら2つのOAuthソリューションに遭遇しました:

彼らは私が欲しいものに非常に似た何かを記述しているようです。しかし、SAML/CASでこれを行う方法を示すガイド/ブログ投稿/チュートリアルは見つかりませんでした。

提案を歓迎します。

更新2

ユースケースの詳細。

既存のSAMLアーキテクチャはありません。主に、すべてのアプリケーションにアクセスするのは、当社のユーザー(当社のWebサイトに直接登録されている)です。将来的には、APIを呼び出すサードパーティ(パートナー)企業が存在する可能性があります。また、これらのサードパーティ(パートナー)企業(Webサイトに登録済み)のユーザーがアプリにアクセスする場合があります。

48
Anjan

[〜#〜] ldap [〜#〜]またはActiveDirectoryの認証が必要な場合は、 [〜#〜] cas [〜#〜]上記の宝石はあなたにぴったりです(RubyCAS、CASino)。

余裕があれば、商用ベンダーの1つ( Okta など)が最適な選択肢です。なぜなら、彼らはセキュリティパッチを常に把握し、認証が必要です。特に、ActiveDirectoryをサポートする必要がある場合、彼らは既にそれを実装しています。

OAuthはサードパーティ認証に最も役立ちますが、SSOを実行できます。したがって、Google/Facebookログインをサポートしたい場合、またはサードパーティの認証システムになりたい場合は、素晴らしい選択です。 Google/Facebookをサポートしたくないので、OAuthはおそらくあなたが望むものではありません。

SSOのニーズにHTTP POSTのみを使用する場合は、Ruby-samlgemを使用できます。独自のIDプロバイダーを実装し、すべてのWebサイトに(おそらくgemの形式で)サービスプロバイダーコンポーネントを追加する必要があります。必要なものの一部はa Rails api identity providerとして機能します。この gem は、RailsでのAPIの記述をサポートします。

[〜#〜] edit [〜#〜]

あなたは、将来のサードパーティのユーザーがあなたのサイトにログオンする可能性について言及します。これにより、計算が変更され、独自のRuby-samlソリューションが展開されなくなります。

認証APIを共有する最良の方法は、OAuthレイヤーを実装することです。 Doorkeeper は人気のあるソリューションであり、Rails認証。コミュニティのサポート、柔軟性、簡単さの標準になりつつあります。使用可能なため、消耗品認証APIを使用するのに最適な方法です。

ドアキーパーを実装するためのRailscast

14
Uri Mikhli

CAS-Server

ユーザーが資格情報(つまり、ユーザー名とパスワード)を入力するスタンドアロンの中央ログインページ。

CASは、主にクライアントへの属性リリースとシングルサインアウトをサポートするために、標準化されたSAML 1.1プロトコルをサポートします。

(SQLデータベース、ActiveDirectory/LDAP、Googleアカウントなどのテーブル)オープンなマルチプラットフォームCASプロトコルとの完全な互換性(CASクライアントは、PHP、さまざまなJavaフレームワーク、.NET、Zopeなど)多言語ローカライズ-RubyCAS-Serverはユーザーの優先言語を自動的に検出し、適切なインターフェイスを提示します。

enter image description here

[〜#〜] saml [〜#〜]:セキュリティアサーションマークアップ言語は、認証と承認を交換するためのXMLベースのオープン標準データ形式です。当事者間、特にIDプロバイダーとサービスプロバイダー間のデータ。 SAML承認は2ステッププロセスであり、両方のサポートを実装することが期待されています。

enter image description here

OAuth 2.0

OAuth 2.0認証フレームワークにより、サードパーティアプリケーションHTTPへの制限付きアクセスを取得できます。リソース所有者とHTTPサービスの間の承認対話を調整するか、サードパーティアプリケーションが独自にアクセスを取得できるようにすることにより、リソース所有者に代わってサービスを提供します。

enter image description here

重要な注意事項:

[〜#〜] saml [〜#〜]には、OAuth2に欠けている機能が1つあります:SAMLトークンには、ユーザーID情報が含まれます(署名のため)。 OAuth2を使用すると、すぐに使用できるようになりません。代わりに、リソースサーバーは、承認サーバーでトークンを検証するために追加のラウンドトリップを行う必要があります。

一方、OAuth2を使用すると、認可サーバー上のアクセストークンを無効化し、リソースサーバーへの以降のアクセスから無効にすることができます。

どちらのアプローチにも素晴らしい機能があり、どちらもSSOで機能します。複数の言語の概念とさまざまな種類のアプリケーションの両方を実証しました。結局のところ、OAuth2は私たちのニーズによりよく適合しているようです(利用できる既存のSAMLインフラストラクチャがないため)。

OAuth2は、現在のすべてのニーズをカバーし、ネイティブアプリケーションとの相互運用性のための回避策の使用を回避する、よりシンプルでより標準化されたソリューションを提供します。

どちらを使用すべきか?

1.ユースケースにSSOが含まれる場合(少なくとも1つのアクターまたは参加者が企業の場合)、[〜#〜] saml [〜#〜]

2.ユースケースに、リソース(アカウント、写真、ファイルなど)への(一時的または永続的な)アクセスの提供が含まれる場合、OAuthを使用します。

3.パートナーまたは顧客アプリケーションへのアクセスをポータルに提供する必要がある場合は、[〜#〜] saml [〜#〜]を使用します。

4.ユースケースで集中IDソースが必要な場合は、[〜#〜] saml [〜#〜](IDプロバイダー)を使用します。

5.ユースケースにモバイルデバイスが含まれる場合は、OAuth2と何らかの形式のベアラートークンが適切です。

enter image description here

リファレンス1リファレンス2参考文献

51
Tharif

アンジャン。

CASとOAuthを仕事で使用しました。ここに私の意見をいくつか示します。

基本的に

  • CASとSAMLはどちらもSSOの状況を解決することを目的としています。 CASは、SAMLプロトコルをサポートできるサービスまたは認証システムです。
  • OAuthは、承認と認証を解決することを目的としています。

そして実際には、

  • CASとSAMLは両方とも、1つの組織に属するアプリケーショングループの前のゲートウェイとして機能します。あなたの場合のように。
  • OAuthは、異なる組織間での認証と認証に使用されます。

ちょうど私の考え、そしてより多くの声を聞きたいと思っています。

10
ifyouseewendy

アーキテクチャ(モバイルアプリ、オンラインポータル、およびマイクロサービス)でCASとSAMLを使用しており、両方とも異なる目的に使用されています。当社のオンラインポータルは、パブリックドメインで実行される安全なオンラインバンキングのようなものです。パスワードやその他の安全なトークンをオンラインポータルのDBに保存したくないため、認証と承認にCASを使用します。登録時に、ユーザーがパスワードを選択すると、パスワードがCASに保存され、対応するトークンがポータルのDBに保存されます
ユーザーが次回ログインするとき、ユーザーはポータルにユーザー名とパスワードを入力します。ポータルは、DBからユーザーに対応するトークンをフェッチし、User_name、パスワード、およびトークンを検証のためにCASに送信します。
ただし、ユーザーが1つのアプリケーションに既にログインしており、ユーザーを別のアプリケーションにリダイレクトする場合、ユーザーが2番目のアプリケーションでユーザー名とパスワードを再度入力することは望ましくありません。これを解決するためにSAMLを使用します。最初のアプリケーションは、ユーザーの詳細をSAMLサーバーと共有し、代わりにトークンを取得します。最初のアプリケーションは、トークンを2番目のアプリケーションに渡します。 2番目のアプリケーションはトークンをSAMLサーバーに送信してユーザーの詳細を取得し、成功するとユーザーを目的のページに移動させます。 App2Webのシナリオでは、最初のアプリケーションをモバイルアプリ、2番目のアプリケーションをポータルにすることができます。

1
user2203676

この質問に対して多くの回答を得たので、多くの認証およびユーザー管理機能を備えたこれらの種類のプロトコルを片手で満たすことができるアイデンティティ製品を提案したいと思います。これにはWSO2 Identity Serverバージョンを試すことができます。

0
Harsha