web-dev-qa-db-ja.com

OAuth許可と認証

OAuthの用語は、長い間私を悩ませてきました。 OAuth承認は、一部の人が示唆するような承認ですか、それとも認証ですか?

私が間違っている場合は修正しますが、リソースへのアクセスを許可する行為として認可を常に読んでいますが、OAuthには特定のリソースへのユーザーへのアクセスを実際に許可する実装がないようです。 OAuthの実装に関するすべての話は、ユーザーにトークン(署名され、時には暗号化されている)を提供することです。このトークンは、すべての呼び出しでバックエンドサービスエンドポイントに渡され、ここでOAuth関係ではなく、有効性がチェックされます。

私が取るOAuth認証(すべての記事ではそうではない)は、ユーザーに資格情報を提供することを要求し、ユーザーがアクセスする必要があるかどうかを証明しますか?

したがって、OAuthは認証NOR認証ではないようです。これらは他のプロセスで実行する必要があるためです。それで一体何なの?トークンを伝達するプロセスですか?本当に特定の意味を持たない綿毛の言葉ですか?

謎めいた迷信(幽霊やゴブリン)を鳴らさずにこの主題について質問するのは難しいので、この質問に答えることも簡単なことではないと思います。自己責任で入場してください。

70
edgarhsanchez

OAuthは認可の仕様です

OAuth 2.0は認証の仕様ですが、認証の仕様ではありません。 RFC 6749、 .1。Authorization Endpoint は次のように明示的に述べています。

許可エンドポイントは、リソース所有者と対話し、許可付与を取得するために使用されます。認可サーバーは、最初にリソース所有者の身元を確認する必要があります。認可サーバーがリソース所有者(たとえば、ユーザー名とパスワードのログイン、セッションCookie)を認証する方法は、この仕様の範囲を超えています


OAuth認証?

認証は、「誰が」という情報を扱います。承認は、「誰がどの権限を誰に付与するか」に関する情報を扱います。承認フローには、最初のステップとして認証が含まれています。それは人々がしばしば混乱する理由です。

認証にOAuth 2.0を使用する多くのライブラリとサービスがあります。多くの場合「ソーシャルログイン」と呼ばれ、人々をより混乱させます。 「OAuth認証」(「OAuth承認」ではない)が表示される場合は、認証にOAuthを使用するソリューションです。


OpenID Connect

OpenID 1.0およびOpenID 2.0は、認証の古い仕様です。仕様を作った人々は、人々が認証にOpenIDを使用することを期待していました。ただし、一部の人々は認証に(承認ではなく)OAuth 2.0を使用し始め、OAuth認証が急速に普及しました。

OpenIDの観点からすると、OAuthに基づく認証は十分に安全ではありませんでしたが、人々はOAuth認証を好むことを認めなければなりませんでした。その結果、OpenIDの担当者は、OAuthの上に新しい仕様OpenID Connectを定義することにしました_ 2.0。

はい、これは人々をより混乱させました。


OAuth 2.0およびOpenID Connectの1文の定義

OAuth 2.は、サービスのユーザーがサードパーティのアプリケーションにホストされているデータへのアクセスを許可できるフレームワークです資格情報(IDとパスワード)をアプリケーションに公開せずにサービスで。

enter image description here

OpenID Connectは、サードパーティのアプリケーションが取得できるOAuth 2.0上のフレームワークですサービスによって管理されるユーザーの識別情報。

enter image description here

(申し訳ありませんが、これらの定義は私の会社の 概要 ページからの抜粋です)


実装者の観点からの定義

認証は、エンドユーザーのサブジェクト(=一意の識別子)を決定するプロセスです。主題を決定する多くの方法があります。 IDとパスワード、指紋、虹彩認識など.

Authorizationは、サブジェクトを要求されたアクセス許可およびアクセス許可を要求したクライアントアプリケーションに関連付けるプロセスです。アクセストークンは関連付けを表します。


こちらもご覧ください

  1. OAuthおよびOpenID Connectのフルスクラッチ実装者は調査結果について話し合います
  2. すべてのOAuth 2.0フローの図と映画
  3. すべてのOpenID Connectフローの図
  4. OAuth 2.0への最も簡単なガイド
125

OAuthはAPIまたはサービスではありません。authorizationのオープンスタンダードであり、誰でも実装できます。 OAuthは、直接authentication patternへの応答として作成されました。

これはOAuthです。

How can I allow an app to access my data without necessarily giving it my password?

OAuthアクター

enter image description here

OAuth != authentication

OAuthは認証ではありません。これは承認プロトコル、またはより良いのは委任プロトコルです。

認証と承認

Authenticationは、身元を確認するプロセスです(身元確認)

Authorizationは、誰かが許可されていることを確認するプロセスです(許可)

続きを読む herehere

3
yoAlex5