PHP token設(shè)計(jì)方案

接口特點(diǎn)匯總:

1兑巾、因?yàn)槭欠情_放性的忠荞,所以所有的接口都是封閉的蒋歌,只對公司內(nèi)部的產(chǎn)品有效委煤;

2、因?yàn)槭欠情_放性的府框,所以O(shè)Auth那套協(xié)議是行不通的讥邻,因?yàn)闆]有中間用戶的授權(quán)過程院峡;

3系宜、有點(diǎn)接口需要用戶登錄才能訪問照激;

4盹牧、有點(diǎn)接口不需要用戶登錄就可訪問;


針對以上特點(diǎn)口柳,移動(dòng)端與服務(wù)端的通信就需要2把鑰匙踩寇,即2個(gè)token。

第一個(gè)token是針對接口的(api_token)俺孙;

第二個(gè)token是針對用戶的(user_token);


先說第一個(gè)token(api_token)


它的職責(zé)是保持接口訪問的隱蔽性和有效性荣茫,保證接口只能給自家人用场靴,怎么做到伟葫?參考思路如下:

現(xiàn)在的接口基本是mvc模式,URL基本是restful風(fēng)格宪郊,URL大體格式如下:

http://blog.snsgou.com/模塊名/控制器名/方法名?參數(shù)名1=參數(shù)值1&參數(shù)名2=參數(shù)值2&參數(shù)名3=參數(shù)值3


接口token生成規(guī)則參考如下:

api_token = md5 ('模塊名' + '控制器名' + '方法名' + '2013-12-18' + '加密密鑰') = 770fed4ca2aabd20ae9a5dd774711de2

其中的?

1膘盖、 '2013-12-18' 為當(dāng)天時(shí)間,

2蚌父、'加密密鑰' 為私有的加密密鑰,手機(jī)端需要在服務(wù)端注冊一個(gè)“接口使用者”賬號(hào)后喝滞,系統(tǒng)會(huì)分配一個(gè)賬號(hào)及密碼,數(shù)據(jù)表設(shè)計(jì)參考如下:

字段名字段類型注釋

client_idvarchar(20)客戶端ID

client_secretvarchar(20)客戶端(加密)密鑰

(注:只列出了核心字段右遭,其它的再擴(kuò)展吧!@暄荨!)


服務(wù)端接口校驗(yàn),PHP實(shí)現(xiàn)流程如下:

01

02// 1吨拗、獲取 GET參數(shù) 值

03$module=?$_GET['mod'];

04$controller=?$_GET['ctl']

05$action=?$_GET['act'];

06$client_id=?$_GET['client_id'];

07$api_token=?$_GET[''api_token];

08?

09// 2劝篷、根據(jù)客戶端傳過來的 client_id 哨鸭,查詢數(shù)據(jù)庫娇妓,獲取對應(yīng)的 client_secret

10$client_secret= getClientSecretById($client_id);

11?

12// 3、服務(wù)端重新生成一份 api_token

13$api_token_server= md5($module.?$controller.?$action.??date('Y-m-d', time()) .??$client_secret);

14?

15// 4只估、客戶端傳過來的 api_token 與服務(wù)端生成的 api_token 進(jìn)行校對着绷,如果不相等,則表示驗(yàn)證失敗

16if($api_token!=?$api_token_server) {

17????exit('access deny');??// 拒絕訪問

18}

19?

20// 5荠医、驗(yàn)證通過,返回?cái)?shù)據(jù)給客戶端

21//兼贡。娃胆。。

22?>


再說第二個(gè)token(user_token)


它的職責(zé)是保護(hù)用戶的用戶名及密碼多次提交缕棵,以防密碼泄露。

如果接口需要用戶登錄招驴,其訪問流程如下:

1、用戶提交“用戶名”和“密碼”虱饿,實(shí)現(xiàn)登錄(條件允許,這一步最好走h(yuǎn)ttps)氮发;

2、登錄成功后仇祭,服務(wù)端返回一個(gè) user_token颈畸,生成規(guī)則參考如下:

服務(wù)端用數(shù)據(jù)表維護(hù)user_token的狀態(tài),表設(shè)計(jì)如下:

字段名字段類型注釋

user_idint用戶ID

user_tokenvarchar(36)用戶token

expire_timeint過期時(shí)間(Unix時(shí)間戳)

(注:只列出了核心字段眯娱,其它的再擴(kuò)展吧!J曰铩!)

服務(wù)端生成 user_token 后疏叨,返回給客戶端(自己存儲(chǔ))百宇,客戶端每次接口請求時(shí),如果接口需要用戶登錄才能訪問携御,則需要把 user_id 與 user_token 傳回給服務(wù)端,服務(wù)端接受到這2個(gè)參數(shù)后涮坐,需要做以下幾步:

1誓军、檢測 api_token的有效性;

2昵时、刪除過期的 user_token 表記錄;

3救巷、根據(jù) user_id,user_token 獲取表記錄浦译,如果表記錄不存在,直接返回錯(cuò)誤精盅,如果記錄存在,則進(jìn)行下一步妻枕;

4她肯、更新 user_token 的過期時(shí)間(延期,保證其有效期內(nèi)連續(xù)操作不掉線)晴氨;

5碉输、返回接口數(shù)據(jù);


接口用例如下:


1枝哄、發(fā)布日志

URL: ?http://blog.snsgou.com/blog/Index/addBlog?client_id=wt3734wy636dhd3636sr5858t6&api_token=880fed4ca2aabd20ae9a5dd774711de2&user_token=etye0fgkgk4ca2aabd20ae9a5dd77471fgf&user_id=12

請求方式: ?POST

POST參數(shù):title=我是標(biāo)題&content=我是內(nèi)容

返回?cái)?shù)據(jù):

{

'code' => 1, // 1:成功 0:失敗

'msg' => '操作成功' // 登錄失敗阻荒、無權(quán)訪問

'data' => []

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蓖租,隨后出現(xiàn)的幾起案子羊壹,更是在濱河造成了極大的恐慌蓖宦,老刑警劉巖油猫,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件情妖,死亡現(xiàn)場離奇詭異,居然都是意外死亡毡证,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門藐不,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雏蛮,你說我怎么就攤上這事》ㄌ荩” “怎么了犀概?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铛绰。 經(jīng)常有香客問我产喉,道長,這世上最難降的妖魔是什么曾沈? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮姐帚,結(jié)果婚禮上障涯,老公的妹妹穿的比我還像新娘。我一直安慰自己像樊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布颤霎。 她就那樣靜靜地躺著涂滴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柔纵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天或详,我揣著相機(jī)與錄音,去河邊找鬼霸琴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澎迎,可吹牛的內(nèi)容都是我干的选调。 我是一名探鬼主播夹供,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼哮洽,長吁一口氣:“原來是場噩夢啊……” “哼弦聂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起横浑,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤屉更,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后欺冀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萨脑,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年职车,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹊杖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡积瞒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茫孔,到底是詐尸還是另有隱情,我是刑警寧澤缰贝,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站揩瞪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏李破。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一毛嫉、第九天 我趴在偏房一處隱蔽的房頂上張望妇菱。 院中可真熱鬧,春花似錦闯团、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刃唤。三九已至白群,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笼裳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工侍咱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留密幔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓昧廷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親木柬。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容