SAMLとOAuthを使用したフェデレーションログイン


100

SAMLとOAuthを使用したフェデレーションログインの違いは何ですか?企業がサードパーティのウェブアプリを使用したいが、シングルサインオンと認証機関にもなりたい場合、どちらのソリューションがより意味がありますか?

回答:


128

彼らはさまざまな問題を解決します。

SAMLは、ユーザーが誰であるか、ユーザーの属性は何かに関する情報を共有し、何かへのアクセスを許可/拒否したり、認証を要求したりできるようにするために定義された標準のセットです。

OAuthは、何かへのアクセスの委任に関するものです。あなたは基本的に誰かがあなたのように「行動する」ことを許可しています。これは、ユーザーに代わって何かを実行できるアクセスAPIを付与するために最も一般的に使用されます。

それらは2つのまったく異なるものです。


役立つかもしれないいくつかの例。

OAuthはTwitterを思い浮かべます。GoogleバズとTwitter を使用していて、2つを同期し続けることができるアプリを作成したいとします。基本的に、アプリとTwitterの間で信頼を確立できます。初めてアプリをTwitterにリンクするときは、クラシックプロンプトでTwitterにログインすると、確認ボックスがポップアップし、「«アプリ名»へのアクセスを許可しますか?」「はい」をクリックすると、信頼が確立され、アプリがTwitterであなたと同じように動作できるようになります。投稿を読んだり、新しい投稿を作成したりできます。

SAML-SAMLの場合、2つの無関係なメンバーシップシステム間のある種の「合意」について考えます。私たちのケースでは、US AirwaysとHertzを使用できます。あるサイトから別のサイトに移動できる共有の資格情報のセットはありませんが、ハーツがUSエアウェイズに「取引」を提供したいとします。(私はこれが極端な例であることを承知していますが、我慢してください)。フライトを購入すると、会長会員に無料のレンタカーを提供します。USエアウェイズとハーツは、何らかの形で信頼を確立し、ユーザーを特定する方法を確立しました。私たちの場合、「フェデレーテッドID」は電子メールアドレスであり、これはHertzがUS Airways IDプロバイダーが正確で安全な方法でトークンを配信することを信頼する1つの方法セットです。フライトを予約した後、USエアウェイズのIDプロバイダーはトークンを生成し、ユーザーの認証方法を入力します。この場合、個人に関する「属性」に最も重要な属性はUSエアウェイズのステータスレベルです。トークンが入力されると、トークンは何らかのタイプの参照を介して渡されるか、URLにエンコードされ、Hertzに到達すると、トークンを確認して検証し、無料のレンタカーを利用できるようになります。

このSAMLの例の問題は、多くの特殊なユースケースの1つにすぎないことです。SAMLは標準であり、実装する方法が多すぎます。


または、承認を気にしない場合は、SAMLおよびOpenIDを介して認証をアサートすることをほぼ主張できます。


4
まだ違いはわかりません。「アクセスの許可/拒否」と「APIへのアクセスの許可」は、私には同じように聞こえます。より類似した2つの例を挙げて、違いを確認できますか?たとえば、SAMLを使用してアプリとTwitter間の信頼を確立できなかったのはなぜですか。または、なぜHertzのOAuthを使用してUSAirwaysに特別取引について通知できないのですか?
Tim Cooper

3
少しわかりましたが、OAuthでSSOをいつでも実行できます(IDを提供するAPIへのアクセスを要求することにより)。それは、OAuthがSAMLにできるすべてのことを実行できることを意味しますか?
Dirk

@Dirkあなたはほぼ正しいです。つまり、多くのアプリケーションがGoogle、Facebook、GitHub経由でログインを要求してユーザーのIDやその他の属性を取得してアプリケーションにアクセスできるように、OAuthを使用してユーザーのIDを取得できます。しかし、OAuthを使用してIDを取得する以上のことを実現できるのは事実です。
chirag soni

39

ここに要約されているこの簡単な説明を見てください:

多くの人々はSAML、OpenID、OAuthの違いについて混乱していますが、実際には非常に簡単です。いくつかの重複がありますが、ここでは3つを区別する非常に簡単な方法を示します。

OpenID –消費者向けのシングルサインオン

SAML –エンタープライズユーザー向けのシングルサインオン

OAuth –アプリケーション間のAPI認証

OOのデザインパターンに慣れている人のために、ラッパーパターンには素晴らしい結果があると思います。FacadeDecoratorProxyのパターンを考えてみてください。基本的にこれらはすべて同じで、単なるラッパーです... 違いは、各パターンの意図です

同様に、SAML、OAuth、OpenIDはすべて、共通の基礎となるメカニズムを介してさまざまな意図を促進します。これは、プライベートインタラクションのためにサービスプロバイダー/ ID機関にリダイレクトされ、その後、元のサードパーティアプリにリダイレクトされます。

ネットを見回すと、プロトコルの機能が重複しています。OAuthによる認証は完全に合理的です。SAMLとOpenIDはフェデレーションIDに特化しているため、OAuth経由のSSOはあまり意味がありません。

問題自体、企業のコンテキストは、SAMLはOAuth for SSOよりも適切に聞こえます。企業IDと統合したいサードパーティのアプリを見ると、SAML / LDAP / Radiusなどと統合するようにすでに設計されていることに気付くでしょう。インターネットの相互作用にはIMO OAuthがより適切です。アプリケーション間、またはおそらく大規模な企業環境でサービス指向アーキテクチャを構成するアプリケーション間。

承認規則は、他の方法でも企業環境で指定できます。LDAPはこのための一般的なツールです。ユーザーをグループに編成し、アプリケーション権限をグループメンバーシップに関連付けることは、広く行われているアプローチです。LDAPは認証にも使用できます。Active Directoryは良い例ですが、私はOpenLDAPを好みます。


1
リンク@Sundeepを更新してくれてありがとう
quickshiftin

リンクを更新しましたが、すでに回答にあった要約は同じです。
quickshiftin '29 / 07/29

OpenIDはoAuthのみに基づいて構築されています。oAuthは独自のユーザーインターフェースをサポートしていません。OpenIdがそれを行います。oAuthとOpenIDの間に他の違いはありません
これはトラップです

@それは真実ではありません。OpenIDは認証に関するものであり、OAuthは承認に関するものですが、同様の(ブラウザーリダイレクト)メカニズムを共有しています。どちらもUIとは関係ありません... この回答も参照してください。こちらご覧になれます。さらに明確にするために私の答えをもう一度読むことができます。
quickshiftin

1
@ It'satrap OpenId仕様の「OAuth 2.0の上に構築された認証」を確認することをお勧めします。また、OAuth 2.0仕様の「OAuth 2.0 承認フレームワーク」...繰り返しになりますが、1つは認証用に設計され、もう1つは承認用に設計されています。後者を前者に活用することは、それらが共通の基礎となるパラダイムを共有しているため、問題ありません(3回目または4回目は、私はそれを笑いました)。すべては私の未変更の回答にまとめられています。あなたは仲間を読む方法を学ぶべきです。
quickshiftin

3

ここに良い記事が見つかりまし

ここに画像の説明を入力してください

SAML(セキュリティアサーションマークアップ言語)は、シングルサインオン(SSO)、フェデレーション、ID管理を実現するための標準のセットです。

:ユーザー(プリンシパル)が、フライト予約WebサイトAirFlyer(IDプロバイダー)で認証します。これは、シャトル予約Webサイト、Shuttler(サービスプロバイダー)を使用してSAML経由でSSOが構成されています。フライヤーに認証されると、ユーザーは認証を要求せずにシャトルでシャトルを予約できます

OAuth(Open Authorization)は、リソースの承認の標準です。認証は扱いません。

:ユーザーがInstagramアカウント(OAuthプロバイダー)から写真をインポートできる写真共有モバイルアプリ(OAuthコンシューマー)。一時的なアクセストークンまたはキーを写真共有アプリに送信し、数時間後に期限切れになります。


2

SAMLには、他のユーザーがサイトに「ログイン」できるようにするさまざまな「プロファイル」があります。SAML-PまたはSAMLパッシブは非常に一般的で、設定はかなり簡単です。WS-Trustも同様で、Webサイト間のフェデレーションも可能です。

OAuthは認証用に設計されています。あなたはここでもっと読むことができます:

OpenIDとOAuthの違いは何ですか?


「ログイン」と「承認」の違いを理解するのに苦労しています。違いを説明する例を挙げていただけますか?
Tim Cooper

@TimCooperの「ログイン」は認証の緩い用語ですが、「承認」は十分な承認です... リクエストごとの例
quickshiftin

1
@quickshiftinさて、私はその違いを理解しています。あなたの答えは、SAMLが認証を行うのに対し、OAuthは承認を行うことを暗示しているようです。あれは正しいですか?または、両方が両方を実行しますか-(その場合、違いはまだわかりません)。
Tim Cooper

1
@TimCooperプロトコルにはいくつかの重複する機能があります。OAuthは承認を対象としていますが、認証もサポートしています。企業のコンテキストでのSSOは、SAMLが専用に設計されたものです。一方、SAMLは認証もサポートしています。コンテキストが使用するテクノロジを決定する際に最も重要な要因です。昨年私は、SimpleSAMLPhpを使用してKerberosバックエンドに対してユーザーを認証し、次にLDAPシステムから認証ルールを検索するExpression Engineの拡張機能を書きました。そこはクレイジーな世界です!
quickshiftin

2

彼らは微妙なユースケースを扱います

  • SAML-さまざまなサービスプロバイダー(WebまたはWebサービスなど)へのユーザーの資格情報(SSOなど)の共有
  • OAuth-ユーザーに代わってアプリにリソースへのアクセスを委任するユーザー


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.