web-dev-qa-db-ja.com

OAUTH、OpenID、OPENID Connectの違いは非常に簡単ですか?

OAUTH、OpenID、OPENID Connectについて、Webで入手できる難しい専門用語を非常に混乱しています。誰でも簡単な言葉の違いを教えてもらえますか?.

148
user960567

OpenIDauthenticationのプロトコルですが、 OAuth承認。認証とは、あなたが話している相手が確かに本人であることを確認することです。承認とは、その人に何を許可するかを決定することです。

OpenIDでは、認証が委任されます。サーバーAはユーザーUの認証を求めますが、Uの資格情報(Uの名前とパスワードなど)は、Aが信頼する(少なくとも、ユーザーの認証を信頼する)別のサーバーBに送信されます。実際、サーバーBはUが実際にUであることを確認してから、Aに「本当のUだ」と伝えます。

OAuthでは、承認が委任されます。エンティティAは、エンティティBから「アクセス権」を取得します。これは、Aがアクセスを許可されるようにサーバーSに示すことができます。したがって、BはAに一時的な特定のアクセスキーを提供できます。 OAuthサーバーが大きなホテルのキーマスターであると想像できます。彼は従業員に、入る予定の部屋のドアを開くキーを与えますが、各キーは制限されています(それはすべての部屋にアクセスできるわけではありません。さらに、キーは数時間後に自己破壊します。

エンティティAがBからOAuthを介してアクセスキーを取得し、それをサーバーSに表示した場合、サーバーSがinfer thatを実行する可能性があることに基づいて、認証はある程度、疑似認証に悪用される可能性があります。 Bは、アクセスキーを付与する前にAを認証しました。したがって、一部の人々はOAuth OpenIDを使用する必要がある場所で使用します。 このスキーマ は啓発的な場合もそうでない場合もありますが、この疑似認証は何よりも混乱しやすいと思います。 OpenID Connect はまさにそれを行います:それは認証プロトコルにOAuthを悪用します。ホテルの例では:従業員と呼ばれる人に遭遇し、その人が彼に私の部屋を開けるキー、それから私仮定これは本当の従業員である、というのは、キーマスターが私の部屋を開けないキーを彼に与えなかったからです。

181
Thomas Pornin

簡単な用語

  1. OpenIDは、個人のidentity(認証)を検証するためのものです。
  2. OAuthは、アクセス人のもの(承認)についてです。
  3. OpenID Connectは両方を行います

3つすべてで、ユーザーはユーザー名/パスワード(またはその他の資格情報)を、信頼性の低いアプリではなく信頼できる機関に渡すことができます。

もっと詳しく

何かを理解するには、その歴史を見てください。

OpenID&OAuthは並行トラックで開発され、2014年にOpenID Connectに統合されました。その歴史を通じて、OpenIDとOAuthはアプリがプライベートユーザーの資格情報を処理します。OpenIDでオーソリティがユーザーの身元を確認できるようにするのに対し、OAuthオーソリティはユーザーのものへの制限付きアクセスを許可します。

OpenID 1.(2006)では、エンドユーザーがID(URL)を所有していることの証明をアプリに権限を要求できます。

  • アプリのエンドユーザー:私はSteve A. Smithです。
  • 権威へのアプリ:これはスティーブA.スミスですか?
  • エンドユーザーと権限が少しの間話します。
  • アプリに対する権限:はい、それはSteve A. Smithです。

OpenID 2.(2007)は同じことを行いますが、2番目のID形式(XRI)を追加し、最終的な方法に柔軟性を追加しますユーザーはIDと権限を指定します。

OpenID Attribute Exchange 1.(2007)は、権限を持つエンドユーザーのプロファイル情報をアプリにフェッチおよび保存させることにより、OpenID 2.0を拡張します-エンドユーザーのIDの確認に加えて。

  • アプリのエンドユーザー:私はSteve A. Smithです。
  • 権威へのアプリ:これはスティーブA.スミスですか? ああ、もしそうなら、彼のメールアドレスと電話番号も教えてください。
  • エンドユーザーと権限が少しの間話します。
  • アプリに対する権限:はい、それはSteve A. Smithです。 彼のメールアドレスは[email protected]で、電話番号は123-456-7890です。

OAuth 1.(2010)は、エンドユーザーがアプリに、権限が与えられているサードパーティサーバー上のリソースへの制限付きアクセスを許可します所有しています。

  • エンドユーザーへのアプリ:他のサーバーにある画像にアクセスしたいと考えています。
  • エンドユーザーと権限が少しの間話します。
  • アプリへの権限:これはアクセストークンです。
  • サードパーティサーバーへのアプリ:エンドユーザーの写真へのアクセスが許可されていることを証明するアクセストークンを次に示します。

OAuth 2.(2012)はOAuth 1.0と同じことを行いますが、完全に新しいプロトコル。

OpenID Connect(2014)は、OpenID 2.0、OpenID Attribute Exchange 1.0、およびOAuth 2.0単一のプロトコルで、アプリケーションが権限を使用できるようにします...

  1. エンドユーザーの身元を確認するため
  2. エンドユーザーのプロファイル情報を取得する
  3. エンドユーザーのものへのアクセスを制限するため。
93
Shaun Luttin

多くの人がまだこれを訪れているので、これはそれを説明する非常に単純な図です

OpenID_vs._pseudo-authentication_using_OAuth

礼儀ウィキペディア

59
Vrashabh Irde

他の応答に加えて:多くの混乱は不正確、または少なくとも珍しい用語の使用Authenticationに起因すると思いますおよびAuthorization

OpenID Connect 1.0は Authentication ソリューションとして販売されていますが、それ自体では認証を処理しません。基本的な意味での「実際の」認証(ユーザーの資格情報を検証してIDを証明するプロセス)は、OpenID Connectの範囲外です。

OpenID Connectは、 Federation プロトコルとしてより適切に販売され、依存パーティがサードパーティのIDプロバイダーからの既存の認証プロセス、ユーザーデータベース、およびセッション処理を使用できるようにします。これは機能的にはSAML 2.0に似ています。

注:厳密に言えば、証明書利用者の観点から見ると、IDプロバイダーからIDトークンを取得して検証することは、認証方法と見なすことができます。 「OpenID Connectは認証プロトコルです」の由来はそこにあると思います。


OAuth 2.0が Authorization プロトコルであることと同じ理由):通常、認証は、どのユーザーがどのリソースにアクセスできるかを決定するアクセスポリシーを定義するプロセスです。その定義はOAuthにはほとんど適用されません。

OAuth 2.0は実際に、ユーザーが application/client が自分のリソースに代わってアクセスできるようにする方法を提供しています。言い換えると、OAuth 2.0は、ユーザーではなく clients アプリケーションにリソースへのアクセスを許可します。許可ポリシー(許可 users リソースへのアクセス)は、OAuthをデプロイする前に存在しているはずです。

「OAuth an access delegation protocol」というラベルを付けました。

その投稿がさらに混乱を引き起こした場合、私は謝罪します:)

8
Guillaume

私たちはすでに図と多くの良いデータを持っているので、これが役立つ場合の例です

StackOverflowにコメントを投稿したいとしましょう。 StackOverflowは、ユーザーの評判が50の場合にのみコメントを許可します。

StackOverflowはこのリクエストをauthorizeする必要があります(たとえば、ユーザーが50以上の担当者を持っている場合にのみ許可する)。 StackOverflowは保護されたリソースを所有しているため、StackOverflowはOAuthを使用しません。StackOverflowがユーザーに代わってFacebookにコメントを投稿しようとした場合、OAuthを使用します。代わりに、StackOverflowはローカルを使用します許可(例if (user.reputation < 50) throw InsufficientReputationError();

これを行うには、StackOverflowは最初に誰がリクエストを行っているかを知る必要があります。つまり、リクエストを承認するには、まずリクエストをauthenticateする必要があります。

StackOverflowは最初にセッションとHTTPヘッダーをチェックして、ユーザーをすばやく認証できるかどうかを確認します(これは最初のリクエストではないなど)が、失敗します。

StackOverflowがOpenID Connectを使用することにしたとしましょう。つまり、StackOverflowはIDプロバイダーを信頼します。これはStackOverflowが信頼するサービスで、現在のユーザーが誰であるかをStackOverflowに通知できます。この例では、それがGoogleであると想定します。

StackOverflowは、現在のユーザーが誰かをGoogleに尋ねるようになりました。ただし、Googleはまず、StackOverflowが現在のユーザーを認識できるようにする必要があります。つまり、GoogleはStackOverflowをauthorizeする必要があります。 Googleは保護されたリソースの所有者であり、StackOverflowはリソースにアクセスするため、ここではOAuthを使用できます。実際、OpenID Connectがそれを義務付けています。

つまり、StackOverflowは、Googleが信頼する承認サーバーでauthenticateを実行する必要があります(実際には、これもGoogleになりますが、ケース)とアクセストークンを取得します。そのアクセストークンをGoogleに渡して、ユーザーのIDを要求します。次に、GoogleはユーザーのIDを返し(途中でIDに署名します)、StackOverflowは、ユーザーのIDがわかっているため、リクエストを承認します。

見逃した場合は、それぞれに複数の認証と承認の手順がありました。

  • StackOverflowは、セッションCookieを使用してリクエストをauthenticateしようとしましたが、失敗しました。
  • StackOverflowは、OpenID Connectを使用してリクエストをauthenticatedします。
  • GoogleauthorizedOAuthを使用したIDのSOリクエスト
  • Authorization ServerauthenticatedStackOverflow(おそらくクライアントIDとクライアントシークレットを使用)。
  • さらに、OAuthワークフローの一部として、承認サーバーは、ユーザーに次のことを要求することにより、authenticatedユーザー名とパスワード。
  • さらに、ユーザー自身がauthorizedSOのID要求を許可画面に応答することで許可する場合があります(たとえば、「StackOverflowにアクセスを許可しますか? Eメール?")
  • StackOverflowauthorizedユーザーが50を超えるレピュテーションを持っていることを確認することによりリクエストを許可します。

OpenIDとは何ですか(接続なし)?

これは、IDプロバイダー(Googleなど)がユーザー情報をサービス(StackOverflowなど)に渡すことを可能にする以前のプロトコルでした。ただし、GoogleはStackOverflowがユーザーのIDにアクセスできることを承認するために、別のメソッド(OAuthではない)を使用しました。 OpenIDにはいくつかのセキュリティ上の欠陥(対処されたと思います)がありましたが、私の考えでは、本当のキラーは、OAuthのサポートが優れていて、OpenIDのカスタムプロトコルを学習するよりも作業が少ない傾向にあるという事実です。

今日現在、誰もがそれを放棄しています。使用しないでください。 OpenID Connectを使用します。

OAuthの「乱用」

上記で説明したシナリオでは、OAuthが認証の目的で正確に使用されています。ただし、別のワークフローがあり、多くの場合、ユーザーを混乱させる可能性があります。これは、多くの状況で(ほとんど?)ユーザーのIDとOAuth承認サーバーは同じサーバーです。

この場合、最初に認証サーバーにHTTP要求を行ってアクセストークンを取得し、次に同じサーバーに再度送信してIDトークンを取得するのは少し過剰に思えます。したがって、承認サーバーがユーザーID情報をアクセストークンにバンドルできるように、OAuth仕様に対して 拡張 が作成されました。

これにより、認証が完全にブラウザで行われるようになります(例:StackOverflowのサーバーが関与する必要はありません)。ただし、この種の認証はあまり役に立たず、(私は思いますか?)あまり使用されません。

8
Pace

すでに述べたように、OauthとOpenIDは別のものであり、OpenID Connectはこの2つを組み合わせたものです。

しかし、すでに述べたように、authenticationおよびauthorizationを使用して区別するOauthとOpenIDは明らかに間違っています。格納されたIDに対するエンティティの要求の真実性の確認である認証はOpenIDに起因しますが、これはOauthプロセスの一部です。承認、特定のリソースまたはコンテナへのアクセス許可はOauthに帰属しますが、OpenIDプロセスの一部です。

私の経験では、OauthとOpenIDの本当の違いは、各スキームの下で実行されている典型的な非認証関連のアクティビティとその実行者に見ることができます。

  • OpenIDは、リソースがバンドルされた許可されたコンテナーへのユーザーアクセスを容易にします(Webサイトへのアクセスなど)。
  • Oauthは、コンテナー内の許可されたリソースへの自動アクセスを容易にします(例:Web APIを介したファイルまたはレコードのCRUD操作)。

次に、OpenID Connectを使用すると、ユーザーはWebアドレスにアクセスでき、一度アクセスすると、基になるWebアプリケーションにユーザーに代わって追加のオフサイトリソースを取得する方法を提供します。

3
johnaweber

要約すると、OpenID ConnectはOAuth 2.0)のプロファイルと拡張機能を含むフェデレーションID APIであり、クライアント(つまり、モバイルアプリまたはWebサイト)が認証のために個人を中央のIDプロバイダーにリダイレクトできるようにします、その人がそのクライアントへの情報のリリースを承認できるようにします。

あなたは私のブログを読むべきですOAuth対SAML対OpenID Connecthttps://gluu.co/oauth-saml-openid

OpenID Connect APIには、すべてがOAuthに関連しているわけではない、いくつかのエンドポイントが含まれています。

OAuthエンドポイント

  • Authorization:ログインページと承認(同意)ページを表示するフロントチャネルWebサイト。 (RFC 6749)
  • Token:クライアントがアクセストークン、id_tokens、および更新トークンをリクエストできる、通常は認証を必要とするバックチャネルエンドポイント。 (RFC 6749)
  • Configuration.well-known/openid-configurationで公開されたプロバイダーメタデータ。エンドポイントの場所、サポートされている暗号化アルゴリズム、およびOPと対話するためにクライアントが必要とするその他の情報が含まれます。 (RFC 8414)
  • クライアント登録:アプリケーションがOAuthクライアントを作成または更新するためのエンドポイント(RFC 7591)

OAuth以外のエンドポイント

  • Userinfo:クライアントがサブジェクトに関するクレームを要求できる、アクセストークンで保護されたAPI。これは、OAuth用語のリソースサーバーです。
  • [〜#〜] jwks [〜#〜]:署名と暗号化に使用されるOPの現在の公開鍵
  • セッション管理:3つすべてのOpenIDログアウト仕様で使用されます(どれもうまく機能しません)
  • Webfinger:bootstrap電子メールアドレス(または他の識別子)から逆方向に動作するOP検出に使用されます。つまり、ドメイン(RFC 7033、ただしOAuth WGの一部ではない)
2
Mike Schwartz