web-dev-qa-db-ja.com

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

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

126
metdos

オリジナルのOpenID 2.0とSAML

これらは2つの異なる認証プロトコルであり、技術レベルが異なります。

ユーザーが認証を開始すると、遠くから違いが始まります。 OpenIDでは、ユーザーログインは通常、認証を担当するリソースのHTTPアドレスです。一方、SAMLはサイトとIDプロバイダー間の明示的な信頼に基づいているため、不明なサイトから資格情報を受け入れることはかなりまれです。

OpenIDのIDは、ネットを簡単に回避できます。開発者としては、まったく異なるOpenIDプロバイダーからのユーザーを受け入れることができます。一方、SAMLプロバイダーは通常、事前にコーディングする必要があり、選択したIDプロバイダーのみでアプリケーションをフェデレートします。受け入れられているOpenID IDプロバイダーのリストを絞り込むことは可能ですが、これは一般的なOpenIDの概念に反すると思います。

OpenIDを使用すると、任意のサーバーからのIDを受け入れます。誰かがhttp://someopenid.provider.com/john.smithであると主張しています。これをデータベース内のユーザーとどのように一致させますか?どういうわけか、たとえば、この情報を新しいアカウントで保存し、ユーザーが再びサイトにアクセスしたときにこれを認識することによって。ユーザーに関するその他の情報(ユーザーの名前やメールを含む)は信頼できないことに注意してください!

一方、アプリケーションとSAML Idプロバイダーの間に明示的な信頼がある場合、名前とメールを含むユーザーに関する完全な情報を取得できます。この情報は、信頼関係のためだけに信頼できます。つまり、IDプロバイダーが何らかの方法ですべての情報を検証したと信じがちであり、アプリケーションレベルで信頼できるということです。ユーザーが不明なプロバイダーによって発行されたSAMLトークンを持っている場合、アプリケーションは認証を拒否します。

OpenID ConnectとSAML

(セクションは2017年7月に追加、2018年8月に拡張)

この回答の日付は2011年で、その時点でOpenIDは OpenID 2. の略でした。その後、2012年のどこかで OAuth2. が公開され、2014年に OpenID Connect (より詳細なタイムライン here )が公開されました。

最近これを読んでいる人にとって-OpenID Connectは元の回答が参照するOpenIDとは異なり、むしろOAuth2.0の拡張セットです。

この回答 は概念的な観点からいくらかの光を当てることができますが、OAuth2.0のバックグラウンドを持つ人にとって非常に簡潔なバージョンは、OpenID Connectis実際にはOAuth2.0ですが、アクセストークンが利用可能になった後、標準的な方法である ユーザー情報のクエリ が追加されます。

元の質問を参照-OpenID Connect(OAuth2.0)とSAMLの主な違いは、アプリケーションとIDプロバイダーの間に信頼関係がどのように構築されるかです。

  • SAMLはデジタル署名に基づいて信頼関係を構築し、IDプロバイダーによって発行されたSAMLトークンは署名付きXMLであり、アプリケーションは署名自体と提示する証明書を検証します。ユーザー情報は、SAMLトークンなどの情報に含まれています。

  • OAuth2は、アプリケーションからIDへの直接HTTP呼び出しで信頼関係を構築します。要求にはアクセストークン(プロトコルフロー中にアプリケーションによって取得される)が含まれ、応答にはユーザーに関する情報が含まれます。

  • OpenID Connectは、これをさらに拡張して、アプリケーションからIDプロバイダーへの呼び出しを含むこの追加のステップwithoutを取得できるようにします。このアイデアは、OpenID Connectプロバイダーが実際にtwoトークン、access_token、OAuth2.0が発行するものと同じものを発行するという事実に基づいていますそして新しいもの、JWTトークンであるid_tokensignedIDプロバイダーによる。アプリケーションは、JWTトークンに含まれるクレームに基づいてIDトークンを使用してローカルセッションを確立できますが、IDトークンを使用して他のクエリを実行することはできませんサードパーティサービスへの呼び出しなどのサービスでは、引き続きアクセストークンを使用する必要があります。 OpenID Connectは、SAML2(署名されたトークン)とOAuth2(アクセストークン)のハイブリッドと考えることができます。OpenIDConnectは両方を含むだけです。

148
Wiktor Zychla

OpenIDとSAML2はどちらも、フェデレーションIDの同じ概念に基づいています。以下はそれらの違いの一部です。

  1. SAML2はシングルサインアウトをサポートしていますが、OpenIDはサポートしていません
  2. SAML2サービスプロバイダーはSAML2 IDプロバイダーと結合されていますが、OpenID依存パーティはOpenIDプロバイダーと結合されていません。 OpenIDには、OpenIDが与えられると、対応するOpenIDプロバイダーを動的に検出する検出プロトコルがあります。 SAMLには、アイデンティティプロバイダーディスカバリサービスプロトコルに基づくディスカバリプロトコルがあります。
  3. SAML2では、ユーザーはSAML2 IdPに結合されます。SAML2識別子は、それを発行したSAML2 IdPに対してのみ有効です。ただし、OpenIDを使用すると、識別子を所有し、任意のOpenIDプロバイダーにマッピングできます。
  4. SAML2には異なるバインディングがありますが、OpenIDにあるバインディングはHTTPのみです
  5. SAML2は、サービスプロバイダー(SP)で開始することも、IDプロバイダー(IdP)で開始することもできます。ただし、OpenIDは常にSP開始されます。
  6. SAML 2はXMLに基づいていますが、OpenIDはそうではありません。
  7. 過去3年間に開発されたアプリケーションのほとんどは、OpenID Connectのみをサポートしていました。
  8. 2018年5月にMicrosoft Azure ADに渡された8B +認証リクエストの92%は、OpenID Connect対応アプリケーションからのものでした。
85

技術的な詳細はさておき、パーティーにかなり遅れて、SAMLと他の認証標準(OpenIDを含む)の最大の違いは、

SAMLには、IDプロバイダー(IDP)とサービスプロバイダー(SP)が必要です。事前にお互いを知るには、pre-configuredstatic認証および許可。 OpenId(+ Connect)にはそのような要件はありません。

これは、誰がデータにアクセスするかを完全に制御したいIDPにとって重要です。標準の一部は、特定のSPに提供されるものを構成することです。

たとえば、銀行は、事前に定義されたサービス(規制やその他の厳格なセキュリティルールのため)以外のサービスにユーザーがアクセスすることを望まない場合があります。

これは、OpenId IDPがそのような制限を実施できないことを意味するものではありません。 OpenIDの実装者はアクセスを制御できますが、それはOpenIDの目的ではありません。

事前定義、厳密、静的、アクセス制御の違いを除いて、概念的に(技術的にではなく)、 OpenID ConnectSAML は似ています。

要するに、SPの場合、顧客が必要とするものをサポートする必要があります。

  1. 顧客が個々のエンドユーザー顧客である場合(たとえば、Google IDを使用)、SAMLを忘れてください。 OpenID Connectを使用します。
  2. 顧客が、従業員がサービスを使用し、サービスに提供するデータの静的リストのみをエクスポートすることを望む銀行である場合、銀行はおそらくSAMLをサポートすることを望みます。銀行には、クライアントの制限があるOpenIDの実装があります。これは幸運な日です:)
10

SAMLとOpenIDの両方が、IDプロバイダー(IdPの略)、つまり分散認証プロトコル(シングルサインオンID)として機能します。

SecurityAssertionMarkupLanguage(SAML)は、セキュリティドメイン間で認証および許可データを交換するための一連のプロファイルです。 SAMLドメインモデルでは、IDプロバイダーは特別な種類の認証機関です。具体的には、SAML IDプロバイダーは、SAMLのSSOプロファイルとともに認証アサーションを発行するシステムエンティティです。これらの認証アサーションを使用する証明書利用者は、SAMLサービスプロバイダーと呼ばれます。 ソース

OpenIDConnect(OIDC)はOAuthの上の認証レイヤーです2.0、認可フレームワーク。標準はOpenID Foundationによって管理されています。 OAuthは、認証プロトコルおよび認証プロトコルとして特別に設計されたOpenIDではなく、認証プロトコル用です。 OIDCは単純なJSON Webトークン(JWT)を使用し、JavaScriptで消費しやすくなっています。

ユースケースシナリオ:

ユーザーがFacebookまたはTwitterでログインしたい場合は、OAuthを使用します。ユーザーが「他の人が自分のIDを所有することを望まない」ため、独自のOpenIDプロバイダーを実行する首ひげである場合は、OpenIDを使用します。

enter image description here
ソース

5
Premraj

@Prabath:OpenIDはシングルサインオンをサポートします。

質問ごとに:OpenIDは、複数の信頼できるWebサイトまたは証明書利用者(RP)での集中IDプロバイダー(IdP)によるユーザー認証を可能にします。ユーザーが認証されると、ユーザーは資格情報を再入力せずに複数のOpenID対応Webサイト間を自由に移動できます。

SAMLは、サービスプロバイダーとコンシューマーの間でユーザー認証と承認情報(セキュリティアサーション)を交換するためのXMLに基づく業界のオープンスタンダードです。

1
Nicholas