ホームページ >バックエンド開発 >PHPチュートリアル >PHPインターフェースのトークンの詳細説明

PHPインターフェースのトークンの詳細説明

小云云
小云云オリジナル
2018-03-20 13:39:4411231ブラウズ


この記事では主にphpインターフェースのトークンについて詳しく説明しますので、お役に立てれば幸いです。まずインターフェイスの機能の概要を見てみましょう:

インターフェイスの機能の概要:

1. 非オープンであるため、すべてのインターフェイスは社内製品に対してのみ有効です。非オープンセクシュアルであるため、中間のユーザー認証プロセスがないため、OAuth プロトコルは実行できません。

4. 一部のインターフェースでは、アクセスするためにユーザーのログインが必要ありません。

PHP Token

上記の特性を考慮すると、モバイル端末とサーバー間の通信には 2 つのキー、つまり 2 つのトークンが必要になります。

最初のトークンはインターフェース (api_token) 用です。

最初のトークン (api_token) について説明します

その役割はインターフェースへのアクセスを維持することです。隠蔽性と有効性により、インターフェイスは自分の家族だけが使用できるようになります。参照アイデアは次のとおりです:
サーバーとクライアントの両方で共有される共通属性に基づいてランダムな文字列を生成します。クライアントはこの文字列を生成し、サーバーも同じアルゴリズムに基づいて文字列を生成して、クライアントの文字列を検証します。

現在のインターフェイスは基本的に MVC モードで、URL は基本的に RESTful スタイルです。URL の一般的な形式は次のとおりです:

http://blog.snsgou.com/モジュール名/コントローラー名/メソッド名?パラメーター名。 1=パラメータ値1&パラメータ名 2=パラメータ値2&パラメータ名3=パラメータ値3

インターフェーストークンの生成ルールは以下の通り:

api_token = md5('モジュール名' + 'コントローラ名' + 'メソッド名' + '2013 -12-18' + '暗号化キー') = 770fed4ca2aabd20ae9a5dd774711de2

ここで、
1、'2013-12-18' は時刻、
2 '暗号化キー' は秘密暗号化キーであり、携帯電話に必要です。サーバーに「インターフェース」を登録するには、「ユーザー」アカウントを使用すると、システムによってアカウントとパスワードが割り当てられます。データテーブルの設計リファレンスは次のとおりです:
フィールド名 フィールドタイプ注釈
client_id varchar(20) クライアントID
client_secret varchar(20) ) クライアント (暗号化) キー



サーバー インターフェイスの検証、PHP 実装プロセスは次のとおりです:

<?php   
// 1、获取 GET参数 值   
$module = $_GET[&#39;mod&#39;]; $controller = $_GET[&#39;ctl&#39;]   
$action = $_GET[&#39;act&#39;]; $client_id = $_GET[&#39;client_id&#39;];   
$api_token = $_GET[&#39;api_token‘];   
// 2、根据客户端传过来的 client_id ,查询数据库,获取对应的 client_secret   
$client_secret = getClientSecretById($client_id);   
// 3、服务端重新生成一份 api_token   
$api_token_server = md5($module . $controller . $action .  date(&#39;Y-m-d&#39;, time()) .  $client_secret);   
// 4、客户端传过来的 api_token 与服务端生成的 api_token 进行校对,如果不相等,则表示验证失败   
if ($api_token != $api_token_server) {   
    exit(&#39;access deny&#39;);  // 拒绝访问 } // 5、验证通过,返回数据给客户端    
?>

2 番目のトークン (user_token) について話しましょう

その責任は、ユーザーのユーザー名とパスワードが複数回送信されないように保護することですパスワード漏洩を防ぐための時間です。

インターフェースがユーザーログインを必要とする場合、アクセスプロセスは次のとおりです:

1. ユーザーはログインするために「ユーザー名」と「パスワード」を送信します (条件が許せば、このステップでは https を使用するのが最善です)。

2. ログインに成功すると、サーバーは user_token を返します。生成ルールは次のとおりです:

user_token = md5('user's uid' + 'Unix timestamp') = etye0fgkgk4ca2aabd20ae9a5dd77471fgf

サーバーは user_token のステータスを維持するためにデータ テーブルを使用します。テーブルの設計は次のとおりです:

フィールド名 フィールド タイプ 注釈
user_id int ユーザー ID
user_token varchar(36) ユーザー トークン
expire_time int 有効期限 (Unix タイムスタンプ)


(注: コア フィールドのみがリストされており、その他は展開可能です!!!)


サーバーによって生成 user_token がクライアントに返された後 (それ自体が保存されます)、クライアントがインターフェース要求を行うたびに、インターフェースにアクセスするためにユーザーのログインが必要な場合、user_id と user_token はサーバーがこれら 2 つのパラメータを受け取った後、次の手順を実行する必要があります:

1. 期限切れの user_token テーブル レコードを削除します。 user_id、user_token に基づいて、テーブルのレコードが存在しない場合は、エラーが直接返されます。レコードが存在する場合は、次のステップに進みます。
4. 継続的な操作を保証するために延長されます。有効期間中は削除されません);
5. インターフェースデータを返す;


リクエストメソッド: POST
POST パラメータ: title=I am the title&content=I am the content
戻りデータ:

{       &#39;code&#39; => 1, 
// 1:成功 0:失败      
&#39;msg&#39; => &#39;操作成功&#39; 
// 登录失败、无权访问     
 &#39;data&#39; => []
 }


トークンハイジャックを防ぐには?

トークン漏洩の問題が必ず発生します。たとえば、あなたの携帯電話を入手してトークンをコピーすると、有効期限が切れる前に他の場所であなたとしてログインできます。
この問題を解決する簡単な方法
1. 保存するときに、トークンを対称的に暗号化して保存し、使用時に復号化します。
2. リクエスト URL、タイムスタンプ、トークンを組み合わせてソルト署名を追加すると、サーバーが有効性を検証します。
両方の方法の出発点は、保存されたデータを盗むのは簡単ですが、プログラムを逆アセンブルして暗号化、復号化、署名アルゴリズムをハッキングするのはより困難であるということです。しかし、実際は難しいと言えば難しいことではなく、結局のところ、悪人を警戒するのではなく、紳士を警戒することになります。

関連する推奨事項:

トークンを実装するPHPのインスタンスメソッド

アプリインターフェイストークンの詳細な説明

WeChatアプレットのURLとトークンの設定方法

以上がPHPインターフェースのトークンの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。