ThinkPHP5 の Auth2 を使用した検証プロセスの分析

不言
リリース: 2023-04-03 13:58:02
オリジナル
4597 人が閲覧しました

この記事の内容は、ThinkPHP5 の Auth2 を使用した検証プロセスの分析を共有することです。困っている友人は参考にしてください。また、皆さんのお役に立てれば幸いです。

tp に実装された auth2 検証に関しては、yii とは異なり、インターネット上でメモがほとんど見つかりませんでした。そのため、関連するニーズを持つ友人を助けるためにここにいくつかのメモを投稿します

PS: oauth2 には 4 つのソリューションがあります。この例はクライアントの資格情報に基づいています。他の 3 つは説明しません。

1.composer によるインストール

composer require --prefer-dist bshaffer/oauth2 -server-php

インストールが完了すると、図に示すように、
ThinkPHP5 の Auth2 を使用した検証プロセスの分析
#関連するディレクトリが表示されます

2。認可ファイルの実装

1) 対応するデータ テーブルの作成

まず、図に示すように Pdo.php ファイルを見つけます。

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

##次に場所を見つけます

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

目的、

はテーブルを作成するときに名前を伝えるためのもので、ここで使用されるテーブル名は同じである必要があります。

作成したテーブルについては、コードを直接アップロードするので、コピーして使用できます。直接貼り付けます:

CREATE TABLE 
oauth_access_tokens
 (
access_token
 varchar(40) NOT NULL,
client_id
 varchar(80) NOT NULL,
user_id
 int(11) DEFAULT NULL,
expires
 varchar(19) NOT NULL,
scope
 text,
  PRIMARY KEY (
access_token
),
  KEY 
fk_access_token_oauth2_client_client_id
 (
client_id
),
  KEY 
ix_access_token_expires
 (
expires
),
  CONSTRAINT 
fk_access_token_oauth2_client_client_id
 FOREIGN KEY (
client_id
) REFERENCES 
pos_oauth2_client
 (
client_id
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ログイン後にコピー
CREATE TABLE 
oauth_authorization_codes
 (
authorization_code
 varchar(40) NOT NULL,
client_id
 varchar(80) NOT NULL,
user_id
 int(11) DEFAULT NULL,
redirect_uri
 text NOT NULL,
expires
 int(11) NOT NULL,
scope
 text,
  PRIMARY KEY (
authorization_code
),
  KEY 
fk_authorization_code_oauth2_client_client_id
 (
client_id
),
  KEY 
ix_authorization_code_expires
 (
expires
),
  CONSTRAINT 
fk_authorization_code_oauth2_client_client_id
 FOREIGN KEY (
client_id
) REFERENCES 
pos_oauth2_client
 (
client_id
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ログイン後にコピー
CREATE TABLE 
oauth_clients
 (
client_id
 varchar(80) NOT NULL,
client_secret
 varchar(80) NOT NULL,
redirect_uri
 text NOT NULL,
grant_type
 text,
scope
 text,
created_at
 int(11) DEFAULT NULL,
updated_at
 int(11) DEFAULT NULL,
created_by
 int(11) DEFAULT NULL,
updated_by
 int(11) DEFAULT NULL,
  PRIMARY KEY (
client_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ログイン後にコピー
CREATE TABLE 
oauth_refresh_tokens
 (
refresh_token
 varchar(40) NOT NULL,
client_id
 varchar(80) NOT NULL,
user_id
 int(11) DEFAULT NULL,
expires
 int(11) NOT NULL,
scope
 text,
  PRIMARY KEY (
refresh_token
),
  KEY 
fk_refresh_token_oauth2_client_client_id
 (
client_id
),
  KEY 
ix_refresh_token_expires
 (
expires
),
  CONSTRAINT 
fk_refresh_token_oauth2_client_client_id
 FOREIGN KEY (
client_id
) REFERENCES 
pos_oauth2_client
 (
client_id
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ログイン後にコピー
CREATE TABLE 
oauth_scopes
 (
scope
 text,
is_default
 tinyint(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ログイン後にコピー

データの一部を追加します


insert  into 
oauth_clients
(
client_id,
client_secret,
redirect_uri,
grant_type,
scope,
created_at,
updated_at,
created_by,
updated_by
) values ('admin','123456','http://','client_credentials',NULL,NULL,NULL,NULL,NULL);
ログイン後にコピー

PS、図に示すように説明してください:

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

私の実際の使用では、これら 5 つのテーブルのみを使用します。つまり、この構成では、上で作成した 5 つのテーブルについて、残りのオプションをすべてログアウトしました。

説明したい別の状況があります: おそらく皆さん、テーブル プレフィックスがデータ テーブルに設定されており、関連する変更をここで行う必要があります。たとえば、私が作成しました。図を参照してください。 :

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

そこで、関連する変更を加えました:

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

2) 認証ファイル Oauth2.php を作成し、任意の名前を付けます。

<?phpnamespace appcommon;/**
@author jinyan
@create 20180416
*/use OAuth2StoragePdo;use thinkConfig;
class Oauth2{
ログイン後にコピー
/**
 * @Register new Oauth2 apply
 * @param string $action
 * @return boolean|\OAuth2\Server
 */
function grantTypeOauth2($action=null)
{
    Config::load(APP_PATH.&#39;database.php&#39;);

    $storage = new Pdo(
        [
            &#39;dsn&#39;      => config(&#39;dsn&#39;),
            &#39;username&#39; => config(&#39;username&#39;),
            &#39;password&#39; => config(&#39;password&#39;)
        ]
    );

    $server = new \OAuth2\Server($storage, array(&#39;enforce_state&#39;=>false));
    // Add the "Client Credentials" grant type (it is the simplest of the grant types)
    $server->addGrantType(new \OAuth2\GrantType\ClientCredentials($storage));
    // Add the "Authorization Code" grant type (this is where the oauth magic happens)
    $server->addGrantType(new \OAuth2\GrantType\AuthorizationCode($storage));
    // Add the "User Credentials" grant type (this is where the oauth magic happens)
    $server->addGrantType(new \OAuth2\GrantType\UserCredentials($storage));
    return $server;
}

/**
 * @校验token值
 * @param unknown $server
 */
protected function checkApiAuthroize($server)
{
    if (!$server->verifyResourceRequest(\OAuth2\Request::createFromGlobals())) {
        $server->getResponse()->send();
        exit;
    }
}
ログイン後にコピー
}
?>
ログイン後にコピー
ログイン後にコピー

3) トークン ファイルを作成します。 Access.php

<?phpnamespace apprestfulcontroller;use appcommonOauth2;
/**
@uathor:jinyan
*/
class Access extends Oauth2{
ログイン後にコピー
protected  $_server;

/**
 * @授权配置
 */
public function __construct()
{
    return $this->_server = $this->grantTypeOauth2();
}

/**
 *
 */
private function _token()
{
    // Handle a request for an OAuth2.0 Access Token and send the response to the client
    $this->_server->handleTokenRequest(\OAuth2\Request::createFromGlobals())->send(&#39;json&#39;, &#39;oauth2_&#39;);
}

/**
 * @get access_token
 */
public function access_token()
{
    $this->_token();
}
ログイン後にコピー
}
?>
ログイン後にコピー
ログイン後にコピー

では、access_token 値をリクエストするにはどうすればよいでしょうか? access_token() メソッドを直接呼び出すだけです。

リクエスト URL: http://restful.thinkphp.com/r...

データ テーブルを作成するときに、新しいデータを取得する前に何か追加してください。データの一部?その機能は、access_token のアカウント パスワードを取得するのと同じです。必ず Post メソッドを使用してトークンを取得してください。

リクエストのパラメータ


{
client_id=admin
client_secret=123456
grant_type=client_credentials //这个参数是固定的
}
ログイン後にコピー

リクエストが成功すると、次のようになります。図に示すように、次のように返されます:

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

ff ブラウザのリクエスト インターフェイスを介して貼り付けます httprequest:

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

##4) access_token,Sms.php

<?php
namespace apprestfulcontroller;
/**
Created by PhpStorm.
User: Administrator
Date: 2018/7/29
Time: 22:02
*/
use appcommonOauth2;
class Sms extends Oauth2
{
protected $_server;

/**
 * @授权配置
 */
public function __construct()
{
    $this->_server = $this->grantTypeOauth2();
}

public function test()
{
    //access_token验证
    $this->checkApiAuthroize($this->_server);

    echo &#39;成功请求到数据&#39;;
}
}
ログイン後にコピー

3 を通じてインターフェイス データを取得します。テストの効果は図に示すとおりです。 :

1) まず、access_token リクエストを使用せずに、test() メソッドを実行します:

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

結果は 401 未検証ですstatus

2) 次に、間違った access_token をリクエストします。test() メソッド

ThinkPHP5 の Auth2 を使用した検証プロセスの分析 も 401 ステータスですが、この時点では、図に示されています

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

私たちに情報が返されています

3) 最後に、正しい情報を使用してください。 access_token、test() メソッド

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

したがって、1 番目と 2 番目の状況に基づいて、図に示すように、トークン検証の失敗方法をカスタマイズする必要があります。

ThinkPHP5 の Auth2 を使用した検証プロセスの分析

# # ############################################### 終わり。

ThinkPHP5 の Auth2 を使用した検証プロセスの分析 おすすめ関連記事:

あらゆるタイプのクレジット カード クラスを検証するための php 実装ThinkPHP5 の Auth2 を使用した検証プロセスの分析

thinkphp 検証コードの実装 ( フォーム、ajax実装検証)_php example

以上がThinkPHP5 の Auth2 を使用した検証プロセスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート