OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する
OAuth 2.0 を理解する、oauth2.0 を理解する
OAuth は認証のためのオープン ネットワーク標準であり、現在のバージョンはバージョン 2.0 です。
この記事は、OAuth 2.0 の設計思想と運用プロセスについて簡潔で一般的な説明を提供します。主な参考資料は RFC 6749 です。
1. アプリケーションシナリオ
OAuth がどこに適用されるかを理解するために、仮説的な例を示します。
ユーザーがGoogleに保存した写真を印刷できる「クラウド印刷」Webサイトがあります。このサービスを利用するには、Google に保存されている写真を「クラウド プリント」に読み込ませる必要があります。
問題は、Google がユーザーの承認を得た場合にのみ、「クラウド プリント」にこれらの写真の読み取りを許可することです。では、「クラウドプリント」はどのようにしてユーザーの承認を得ているのでしょうか?
従来の方法では、ユーザーは自分の Google ユーザー名とパスワードを「クラウド プリント」に伝え、後者はユーザーの写真を読み取ることができます。このアプローチにはいくつかの重大な欠点があります。
リーリーOAuth は上記の問題を解決するために生まれました。
2. 名詞の定義
OAuth 2.0 について詳しく説明する前に、いくつかの特別な用語を理解する必要があります。これらは、以下の説明、特にいくつかの図を理解するために非常に重要です。
リーリー上記の用語を理解すると、OAuth の機能は、「クライアント」が安全かつ制御可能な方法で「ユーザー」の承認を取得し、「サービス プロバイダー」と対話できるようにすることであることを理解するのは難しくありません。
3.OAuthの考え方
OAuth は、「クライアント」と「サービスプロバイダー」の間に認可レイヤーを設定します。 「クライアント」は「サービスプロバイダー」に直接ログインすることはできませんが、ユーザーとクライアントを区別するために認可層にのみログインできます。 「クライアント」が認可レイヤーにログインするために使用するトークンは、ユーザーのパスワードとは異なります。ユーザーはログイン時に認可レイヤートークンの権限範囲と有効期間を指定できます。
「クライアント」が認可レイヤーにログインすると、「サービスプロバイダー」は、トークンの権限範囲と有効期間に基づいて、ユーザーの保存情報を「クライアント」に公開します。
4. 操作プロセス
OAuth 2.0の実行プロセスは以下のとおりです(RFC 6749から抜粋)。
上記の 6 つのステップのうち、B が鍵であること、つまり、ユーザーがクライアントをどのように承認できるかが重要であることを理解するのは難しくありません。この認可により、クライアントはトークンを取得し、そのトークンに基づいてリソースを取得できます。
以下では、クライアントが認可を取得するための 4 つのモードを 1 つずつ説明します。
5. クライアント認証モード
クライアントはアクセストークンを取得するためにユーザーから認可グラントを取得する必要があります。 OAuth 2.0 では 4 つの認証方法が定義されています。
- 認証コードモード
- 簡易モード(暗黙的)
- パスワードモード (リソース所有者のパスワード認証情報)
- クライアントモード (クライアント認証情報)
6.認証コードモード
認証コードモードは、最も完全な機能と最も厳格なプロセスを備えた認証モードです。その特徴は、クライアントのバックエンドサーバーを介して「サービスプロバイダー」の認証サーバーと対話することです。
手順は次のとおりです:
リーリー上記の手順に必要なパラメータは次のとおりです。
ステップ A では、クライアントが認証を申請するために使用する URI には次のパラメータが含まれます:
- response_type: 認可タイプを示します。ここでの値は「code」に固定されています 。
- client_id: クライアントのIDを示します。必須のオプションです
- redirect_uri: リダイレクト URI を表します、オプション
- scope: 適用される権限の範囲を示します (オプション)
- state: クライアントの現在の状態を示します。任意の値を指定できます。認証サーバーはこの値を変更せずに返します。
これが例です。
リーリーステップ C では、サーバーは次のパラメータを含むクライアントの URI に応答します。
- code: 認証コードを示します (必須)。コードの有効期間は非常に短くする必要があり、通常は 10 分に設定されます。クライアントはコードを 1 回のみ使用できます。使用しない場合、認証サーバーによって拒否されます。このコードは、クライアント ID およびリダイレクト URI と 1 対 1 に対応します。
- state: クライアントのリクエストにこのパラメータが含まれている場合、認証サーバーの応答にもこのパラメータが正確に含まれている必要があります。
これが例です。
リーリーステップ D では、クライアントは、次のパラメータを含むトークンの HTTP リクエストを認証サーバーに申請します。
- grant_type: 使用される認可モードを示します。ここでの値は「authorization_code」に固定されます。
- code: 前のステップで取得した認証コードを示します (必須)。
- redirect_uri: リダイレクト URI を示します。これは必須であり、ステップ A のパラメーター値と一致している必要があります。
- client_id: クライアント ID を示します (必須)。
これが例です。
<pre class=" http"><code class=" http"> POST /token HTTP/1.1 <span class="token keyword">Host: server.example.com <span class="token keyword">Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW <span class="token keyword">Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb </span></span></span></code>
E步骤中,认证服务器发送的HTTP回复,包含以下参数:
- access_token:表示访问令牌,必选项。
- token_type:表示令牌类型,该值大小写不敏感,必选项,可以是bearer类型或mac类型。
- expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。
- refresh_token:表示更新令牌,用来获取下一次的访问令牌,可选项。
- scope:表示权限范围,如果与客户端申请的范围一致,此项可省略。
下面是一个例子。
<pre class=" http"><code class=" http"> HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache<span class="token application/json"> <span class="token punctuation">{ <span class="token string">"access_token"<span class="token punctuation">:<span class="token string">"2YotnFZFEjr1zCsicMWpAA"<span class="token punctuation">, <span class="token string">"token_type"<span class="token punctuation">:<span class="token string">"example"<span class="token punctuation">, <span class="token string">"expires_in"<span class="token punctuation">:<span class="token number">3600<span class="token punctuation">, <span class="token string">"refresh_token"<span class="token punctuation">:<span class="token string">"tGzv3JOkF0XG5Qx2TlKWIA"<span class="token punctuation">, <span class="token string">"example_parameter"<span class="token punctuation">:<span class="token string">"example_value" <span class="token punctuation">} </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
从上面代码可以看到,相关参数使用JSON格式发送(Content-Type: application/json)。此外,HTTP头信息中明确指定不得缓存。
七、OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する
OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。
它的步骤如下:
<p>(A)客户端将用户导向认证服务器。</p> <p>(B)用户决定是否给于客户端授权。</p> <p>(C)假设用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌。</p> <p>(D)浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值。</p> <p>(E)资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。</p> <p>(F)浏览器执行上一步获得的脚本,提取出令牌。</p> <p>(G)浏览器将令牌发给客户端。</p>
下面是上面这些步骤所需要的参数。
A步骤中,客户端发出的HTTP请求,包含以下参数:
- response_type:表示授权类型,此处的值固定为"token",必选项。
- client_id:表示客户端的ID,必选项。
- redirect_uri:表示重定向的URI,可选项。
- scope:表示权限范围,可选项。
- state:表示客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值。
下面是一个例子。
<pre class=" http"><code class=" http"> GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1 Host: server.example.com </code>
C步骤中,认证服务器回应客户端的URI,包含以下参数:
- access_token:表示访问令牌,必选项。
- token_type:表示令牌类型,该值大小写不敏感,必选项。
- expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间。
- scope:表示权限范围,如果与客户端申请的范围一致,此项可省略。
- state:如果客户端的请求中包含这个参数,认证服务器的回应也必须一模一样包含这个参数。
下面是一个例子。
<pre class=" http"><code class=" http"> HTTP/1.1 302 Found Location: http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA &state=xyz&token_type=example&expires_in=3600 </code>
在上面的例子中,认证服务器用HTTP头信息的Location栏,指定浏览器重定向的网址。注意,在这个网址的Hash部分包含了令牌。
根据上面的D步骤,下一步浏览器会访问Location指定的网址,但是Hash部分不会发送。接下来的E步骤,服务提供商的资源服务器发送过来的代码,会提取出Hash中的令牌。
八、OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する
OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。
在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个著名公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。
它的步骤如下:
<p>(A)用户向客户端提供用户名和密码。</p> <p>(B)客户端将用户名和密码发给认证服务器,向后者请求令牌。</p> <p>(C)认证服务器确认无误后,向客户端提供访问令牌。</p>
B步骤中,客户端发出的HTTP请求,包含以下参数:
- grant_type:表示授权类型,此处的值固定为"password",必选项。
- username:表示用户名,必选项。
- password:表示用户的密码,必选项。
- scope:表示权限范围,可选项。
下面是一个例子。
<pre class=" http"><code class=" http"> POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=password&username=johndoe&password=A3ddj3w </code>
C步骤中,认证服务器向客户端发送访问令牌,下面是一个例子。
<pre class=" http"><code class=" http"> HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache<span class="token application/json"> <span class="token punctuation">{ <span class="token string">"access_token"<span class="token punctuation">:<span class="token string">"2YotnFZFEjr1zCsicMWpAA"<span class="token punctuation">, <span class="token string">"token_type"<span class="token punctuation">:<span class="token string">"example"<span class="token punctuation">, <span class="token string">"expires_in"<span class="token punctuation">:<span class="token number">3600<span class="token punctuation">, <span class="token string">"refresh_token"<span class="token punctuation">:<span class="token string">"tGzv3JOkF0XG5Qx2TlKWIA"<span class="token punctuation">, <span class="token string">"example_parameter"<span class="token punctuation">:<span class="token string">"example_value" <span class="token punctuation">} </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
上面代码中,各个参数的含义参见《OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する》一节。
整个过程中,客户端不得保存用户的密码。
九、OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する
OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する并不属于OAuth框架所要解决的问题。在这种 模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。
它的步骤如下:
<p>(A)客户端向认证服务器进行身份认证,并要求一个访问令牌。</p> <p>(B)认证服务器确认无误后,向客户端提供访问令牌。</p>
A步骤中,客户端发出的HTTP请求,包含以下参数:
- granttype:表示授权类型,此处的值固定为"clientcredentials",必选项。
- scope:表示权限范围,可选项。
<pre class=" http"><code class=" http"> POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=client_credentials </code>
认证服务器必须以某种方式,验证客户端身份。
B步骤中,认证服务器向客户端发送访问令牌,下面是一个例子。
<pre class=" http"><code class=" http"> HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache<span class="token application/json"> <span class="token punctuation">{ <span class="token string">"access_token"<span class="token punctuation">:<span class="token string">"2YotnFZFEjr1zCsicMWpAA"<span class="token punctuation">, <span class="token string">"token_type"<span class="token punctuation">:<span class="token string">"example"<span class="token punctuation">, <span class="token string">"expires_in"<span class="token punctuation">:<span class="token number">3600<span class="token punctuation">, <span class="token string">"example_parameter"<span class="token punctuation">:<span class="token string">"example_value" <span class="token punctuation">} </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
上面代码中,各个参数的含义参见《OAuth 2.0 を理解する、oauth2.0_PHP チュートリアルを理解する》一节。
十、更新令牌
如果用户访问的时候,客户端的"访问令牌"已经过期,则需要使用"更新令牌"申请一个新的访问令牌。
客户端发出更新令牌的HTTP请求,包含以下参数:
- granttype:表示使用的授权模式,此处的值固定为"refreshtoken",必选项。
- refresh_token:表示早前收到的更新令牌,必选项。
- scope:表示申请的授权范围,不可以超出上一次申请的范围,如果省略该参数,则表示与上一次一致。
下面是一个例子。
<pre class=" http"><code class=" http"> POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA </code>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









現在のWin10 Enterprise Edition 2016 長期サービス版を継続利用したくない場合は、一部の内容を変更してシステムイメージをインストールするだけで、Professional Editionに切り替えることができます。 win10 エンタープライズ バージョン 2016 長期サービス バージョンをプロフェッショナル バージョンに変更する方法 1. win + R キーを押し、「regedit」と入力します。 2. 次のパスを上のアドレス バーに直接貼り付けます: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT \CurrentVersion3 に移動し、EditionID を見つけて内容を「professional」に置き換えて確認します。

PHP と OAuth を使用して GoogleDrive を統合する方法 GoogleDrive は、ユーザーがクラウドにファイルを保存し、他のユーザーと共有できるようにする人気のクラウド ストレージ サービスです。 GoogleDriveAPI を通じて、PHP を使用して GoogleDrive と統合するコードを記述し、ファイルのアップロード、ダウンロード、削除、その他の操作を実装できます。 GoogleDriveAPI を使用するには、OAuth 経由で認証する必要があります。

Flask-Security を使用してユーザー認証と認可を実装する方法 はじめに: 最新の Web アプリケーションでは、ユーザー認証と認可は不可欠な機能です。このプロセスを簡素化するために、Flask-Security はユーザーの認証と認可を簡単かつ便利にする一連のツールと機能を提供する非常に便利な拡張機能です。この記事では、Flask-Security を使用してユーザーの認証と認可を実装する方法を紹介します。 1. Flask-Security 拡張機能をインストールします: 最初に

OAuth2 認証方法と PHP での実装 インターネットの発展に伴い、サードパーティのプラットフォームと対話する必要があるアプリケーションがますます増えています。ユーザーのプライバシーとセキュリティを保護するために、多くのサードパーティ プラットフォームは OAuth2 プロトコルを使用してユーザー認証を実装しています。この記事では、OAuth2 認証方法と PHP での実装を紹介し、対応するコード例を添付します。 OAuth2 は、ユーザーがサードパーティのアプリケーションが別のサービス プロバイダー上のリソースにアクセスすることを、何も言及せずに承認できるようにする承認フレームワークです。

Douyin は現在人気のソーシャル メディア プラットフォームとして、人々に豊富なエンターテイメント コンテンツを提供するだけでなく、多くのブランドや販売者にとって製品を宣伝し、販売を達成するための重要なチャネルとなっています。その中でも、Douyinの商品をスライスして販売することは、斬新で効率的なマーケティング手法となっています。では、Douyin のスライス製品の認可はどうやって取得しますか? 1. Douyin のスライス製品はどうやって認可を取得しますか? Douyin のスライス製品は、長いビデオを短いビデオ クリップに分解し、そこに製品のプロモーション情報を埋め込んで視聴者を引き付けます。買う。 。 Douyin で商品をスライスして販売する場合、最初のステップは元のビデオから許可を取得することです。適切なライセンサーを探す場合は、Douyin プラットフォーム、ソーシャル メディア、業界フォーラムなどのさまざまなチャネルの利用を検討できます。人気の動画コンテンツのクリエイターや著作権者を見つけて積極的につながり、

JWT を使用して PHP アプリケーションに認証と認可を実装する方法 はじめに: インターネットの急速な発展に伴い、Web アプリケーションにおける認証と認可の重要性がますます高まっています。 JSONWebToken (JWT) は、PHP アプリケーションで広く使用されている一般的な認証および認可メカニズムです。この記事では、JWT を使用して PHP アプリケーションに認証と認可を実装する方法を紹介し、読者が JWT の使用法をより深く理解できるようにコード例を示します。 1. JWT JSONWebTo の概要

QQ ログイン統合に PHP と OAuth を使用する方法の紹介: ソーシャル メディアの発展に伴い、ユーザーが簡単に登録してログインできるように、サードパーティのログイン機能を提供する Web サイトやアプリケーションが増えています。中国最大のソーシャル メディア プラットフォームの 1 つである QQ は、多くの Web サイトやアプリケーションで提供されるサードパーティのログイン サービスとしても利用されています。この記事では、QQ ログイン統合に PHP と OAuth を使用する方法の手順をコード例とともに紹介します。ステップ 1: QQ オープン プラットフォーム開発者として登録します。QQ ログインの統合を開始する前に、

正規のソフトウェアの中には、自社の知的財産権を保護するために、ソフトウェアを使用する前に何らかの認可を取得し、開発者から許可を得る必要があるものが多くあります。一部のソフトウェアには試用期間が設けられており、その期間を過ぎると、正常に使用できるようにするために再認証を取得する必要があります。 wps が認証の有効期限が切れていることを示すプロンプトを表示した場合、いかなる操作も実行できません。この問題を解決する方法については、以下の説明を見てみましょう。 1. 下の図に示すように、WPS テキスト プログラムを開き、上の図の赤いボックスをクリックしました。 2. 「構成および修復ツール」をクリックします。 3. 以下の図に示すように、「詳細」を選択します。 4. 次の図に示すように、製品管理センターをクリックし、「期限切れ」プロンプトの内容を削除します。 5. 「追加」をクリックした後、下図に示すようにシリアル番号を入力します。 6. それではまず
