• <bdo id="i4g44"></bdo>
    <code id="i4g44"><tr id="i4g44"></tr></code>
    <strike id="i4g44"></strike>
    <bdo id="i4g44"></bdo>

    為用戶創(chuàng)造價值的開發(fā)公司

    始終追求工匠精神,是您靠譜的H5開發(fā)、小程序開發(fā)、微信開發(fā)供應(yīng)商

    藍(lán)暢首頁 >> 動態(tài)

    token是什么?token機(jī)制的原理是什么

    時間:2020-04-28 00:48:20 | 來源:網(wǎng)絡(luò) 由藍(lán)暢整理

    什么是token?

    token的意思是“令牌”,是服務(wù)端生成的一串字符串,作為客戶端進(jìn)行請求的一個標(biāo)識。

    當(dāng)用戶第一次登錄后,服務(wù)器生成一個token并將此token返回給客戶端,以后客戶端只需帶上這個token前來請求數(shù)據(jù)即可,無需再次帶上用戶名和密碼。

    簡單token的組成;uid(用戶唯一的身份標(biāo)識)、time(當(dāng)前時間的時間戳)、sign(簽名,token的前幾位以哈希算法壓縮成的一定長度的十六進(jìn)制字符串。為防止token泄露)。


    token機(jī)制的原理是什么


    身份認(rèn)證概述

    由于HTTP是一種沒有狀態(tài)的協(xié)議,它并不知道是誰訪問了我們的應(yīng)用。這里把用戶看成是客戶端,客戶端使用用戶名還有密碼通過了身份驗(yàn)證,不過下次這個客戶端再發(fā)送請求時候,還得再驗(yàn)證一下。

    通用的解決方法就是,當(dāng)用戶請求登錄的時候,如果沒有問題,在服務(wù)端生成一條記錄,在這個記錄里可以說明登錄的用戶是誰,然后把這條記錄的id發(fā)送給客戶端,客戶端收到以后把這個id存儲在cookie里,下次該用戶再次向服務(wù)端發(fā)送請求的時候,可以帶上這個cookie,這樣服務(wù)端會驗(yàn)證一下cookie里的信息,看能不能在服務(wù)端這里找到對應(yīng)的記錄,如果可以,說明用戶已經(jīng)通過了身份驗(yàn)證,就把用戶請求的數(shù)據(jù)返回給客戶端。

    以上所描述的過程就是利用session,那個id值就是sessionid。我們需要在服務(wù)端存儲為用戶生成的session,這些session會存儲在內(nèi)存,磁盤,或者數(shù)據(jù)庫。

    基于token機(jī)制的身份認(rèn)證

    使用token機(jī)制的身份驗(yàn)證方法,在服務(wù)器端不需要存儲用戶的登錄記錄。大概的流程:

    客戶端使用用戶名和密碼請求登錄。服務(wù)端收到請求,驗(yàn)證用戶名和密碼。驗(yàn)證成功后,服務(wù)端會生成一個token,然后把這個token發(fā)送給客戶端。客戶端收到token后把它存儲起來,可以放在cookie或者Local Storage(本地存儲)里??蛻舳嗣看蜗蚍?wù)端發(fā)送請求的時候都需要帶上服務(wù)端發(fā)給的token。服務(wù)端收到請求,然后去驗(yàn)證客戶端請求里面帶著token,如果驗(yàn)證成功,就向客戶端返回請求的數(shù)據(jù)。


    利用token機(jī)制進(jìn)行登錄認(rèn)證,可以有以下方式:

    a.用設(shè)備mac地址作為token

    客戶端:客戶端在登錄時獲取設(shè)備的mac地址,將其作為參數(shù)傳遞到服務(wù)端

    服務(wù)端:服務(wù)端接收到該參數(shù)后,便用一個變量來接收,同時將其作為token保存在數(shù)據(jù)庫,并將該token設(shè)置到session中。客戶端每次請求的時候都要統(tǒng)一攔截,將客戶端傳遞的token和服務(wù)器端session中的token進(jìn)行對比,相同則登錄成功,不同則拒絕。

    此方式客戶端和服務(wù)端統(tǒng)一了唯一的標(biāo)識,并且保證每一個設(shè)備擁有唯一的標(biāo)識。缺點(diǎn)是服務(wù)器端需要保存mac地址;優(yōu)點(diǎn)是客戶端無需重新登錄,只要登錄一次以后一直可以使用,對于超時的問題由服務(wù)端進(jìn)行處理。

    b.用sessionid作為token

    客戶端:客戶端攜帶用戶名和密碼登錄

    服務(wù)端:接收到用戶名和密碼后進(jìn)行校驗(yàn),正確就將本地獲取的sessionid作為token返回給客戶端,客戶端以后只需帶上請求的數(shù)據(jù)即可。

    此方式的優(yōu)點(diǎn)是方便,不用存儲數(shù)據(jù),缺點(diǎn)就是當(dāng)session過期時,客戶端必須重新登錄才能請求數(shù)據(jù)。

    當(dāng)然,對于一些保密性較高的應(yīng)用,可以采取兩種方式結(jié)合的方式,將設(shè)備mac地址與用戶名密碼同時作為token進(jìn)行認(rèn)證。

    APP利用token機(jī)制進(jìn)行身份認(rèn)證

    用戶在登錄APP時,APP端會發(fā)送加密的用戶名和密碼到服務(wù)器,服務(wù)器驗(yàn)證用戶名和密碼,如果驗(yàn)證成功,就會生成相應(yīng)位數(shù)的字符產(chǎn)作為token存儲到服務(wù)器中,并且將該token返回給APP端。

    以后APP再次請求時,凡是需要驗(yàn)證的地方都要帶上該token,然后服務(wù)器端驗(yàn)證token,成功返回所需要的結(jié)果,失敗返回錯誤信息,讓用戶重新登錄。其中,服務(wù)器上會給token設(shè)置一個有效期,每次APP請求的時候都驗(yàn)證token和有效期。

    token的存儲

    token可以存到數(shù)據(jù)庫中,但是有可能查詢token的時間會過長導(dǎo)致token丟失(其實(shí)token丟失了再重新認(rèn)證一個就好,但是別丟太頻繁,別讓用戶沒事兒就去認(rèn)證)。

    為了避免查詢時間過長,可以將token放到內(nèi)存中。這樣查詢速度絕對就不是問題了,也不用太擔(dān)心占據(jù)內(nèi)存,就算token是一個32位的字符串,應(yīng)用的用戶量在百萬級或者千萬級,也是占不了多少內(nèi)存的。

    token的加密

    token是很容易泄露的,如果不進(jìn)行加密處理,很容易被惡意拷貝并用來登錄。加密的方式一般有:

    在存儲的時候把token進(jìn)行對稱加密存儲,用到的時候再解密。文章最開始提到的簽名sign:將請求URL、時間戳、token三者合并,通過算法進(jìn)行加密處理。

    最好是兩種方式結(jié)合使用。

    還有一點(diǎn),在網(wǎng)絡(luò)層面上token使用明文傳輸?shù)脑捠欠浅NkU的,所以一定要使用HTTPS協(xié)議。


    關(guān)于我們:

    Infocode藍(lán)暢信息技術(shù)有限公司成功為多家世界財富500強(qiáng)企業(yè)以及其他著名品牌提供優(yōu)質(zhì)服務(wù),是您靠譜的互聯(lián)網(wǎng)開發(fā)供應(yīng)商。

    服務(wù)客戶遍及北京、上海、杭州、深圳、廣州、天津、青島、南京、寧波、蘇州、無錫、廈門、重慶、西安等大中型城市及地區(qū)    為您提供H5開發(fā)小程序開發(fā),H5外包,微信開發(fā),H5商城開發(fā),小程序商城開發(fā),網(wǎng)站開發(fā)外包,H5游戲開發(fā),小程序開發(fā)外包,小程序設(shè)計、APP開發(fā)外包,UI設(shè)計,SEO優(yōu)化,SEO外包,視頻后期制作等優(yōu)質(zhì)服務(wù)



    本文地址:
    更多內(nèi)容推薦:
    專欄最新閱讀:
    更多文章閱讀請至:技術(shù)專欄
    Tips: 為您提供 微信開發(fā)H5開發(fā)、微信小程序開發(fā)、微信定制開發(fā)、網(wǎng)站開發(fā)、小程序商城開發(fā)SEO網(wǎng)站優(yōu)化、視頻后期制作等定制化開發(fā)服務(wù)
    主站蜘蛛池模板: 花垣县| 伊吾县| 定兴县| 文登市| 石狮市| 石林| 阿拉善右旗| 石泉县| 江达县| 安化县| 兴安盟| 宣化县| 自治县| 盘锦市| 盈江县| 吴江市| 翁牛特旗| 蒲江县| 泰兴市| 新闻| 财经| 南安市| 广饶县| 崇州市| 吉水县| 麟游县| 龙岩市| 宾阳县| 诸城市| 黎城县| 平邑县| 潢川县| 张家界市| 广德县| 陇西县| 澎湖县| 阿勒泰市| 徐闻县| 六枝特区| 普洱| 郧西县|