PHP Token(令牌)
token的意思是“令牌”,是服務端產生的一串字串,作為客戶端進行請求的一個識別。
針對以上特點,行動端與服務端的通訊就需要2把鑰匙,也就是2個token。 (推薦學習:PHP影片教學)
第一個token是針對介面的(api_token);
第二個token是針對使用者的(user_token);
先說第一個token(api_token)
它的職責是維持介面存取的隱藏性和有效性,並保證介面只能給自家人用,怎麼做到?
參考想法如下:
按伺服器端和客戶端都擁有的共同屬性產生一個隨機字串,客戶端產生這個串,伺服器也按同樣演算法生成一個串,用來校驗客戶端的串。
現在的介面基本上是mvc模式,URL基本上是restful風格,URL大體格式如下:
http://blog.snsgou.com/模块名/控制器名/方法名?参数名1=参数值1&参数名2=参数值2&参数名3=参数值3
介面token產生規則參考如下:
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['mod']; $controller = $_GET['ctl'] $action = $_GET['act']; $client_id = $_GET['client_id']; $api_token = $_GET['api_token‘]; // 2、根据客户端传过来的 client_id ,查询数据库,获取对应的 client_secret $client_secret = getClientSecretById($client_id); // 3、服务端重新生成一份 api_token $api_token_server = md5($module . $controller . $action . date('Y-m-d', time()) . $client_secret); // 4、客户端传过来的 api_token 与服务端生成的 api_token 进行校对,如果不相等,则表示验证失败 if ($api_token != $api_token_server) { exit('access deny'); // 拒绝访问 } // 5、验证通过,返回数据给客户端 ?>
以上是php如何帶著token請求接口的詳細內容。更多資訊請關注PHP中文網其他相關文章!