什么是Token機(jī)制

本篇內(nèi)容主要講解“什么是Token機(jī)制”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“什么是Token機(jī)制”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、獨(dú)山子網(wǎng)站維護(hù)、網(wǎng)站推廣。

        互聯(lián)網(wǎng)發(fā)展到現(xiàn)在已經(jīng)到了一個(gè)非常成熟的時(shí)代,所以不再是一個(gè)你寫(xiě)一個(gè)靜態(tài)網(wǎng)站就可以進(jìn)行瘋狂盈利的時(shí)代了?,F(xiàn)在對(duì)產(chǎn)品有著很多的要求,健壯性,安全性這些都是必不可少的。前兩篇也說(shuō)過(guò)了現(xiàn)在公司一般用戶登錄成功會(huì)給前端返回token,前端訪問(wèn)接口請(qǐng)求數(shù)據(jù)需要攜帶token進(jìn)行身份驗(yàn)證。我們一直說(shuō)token,那究竟什么是token?token其實(shí)就是一個(gè)令牌,是服務(wù)端生成的一串字符串,解析可以得到用戶信息。

        因?yàn)?strong>HTTP是一種無(wú)狀態(tài)協(xié)議,所以是沒(méi)辦法記住用戶的登錄狀態(tài)的。所以客戶端每次請(qǐng)求都需要驗(yàn)證身份,最早的解決方案是:當(dāng)用戶請(qǐng)求登錄成功,在服務(wù)端生成一條記錄,然后把記錄id發(fā)送給客戶端,客戶端收到以后把這個(gè)id存儲(chǔ)在cookie里,下次該用戶再次向服務(wù)端發(fā)送請(qǐng)求的時(shí)候,可以帶上這個(gè)cookie,這樣服務(wù)端會(huì)驗(yàn)證一下cookie里的信息,看能不能在服務(wù)端這里找到對(duì)應(yīng)的記錄,如果可以,說(shuō)明用戶已經(jīng)通過(guò)了身份驗(yàn)證,就把用戶請(qǐng)求的數(shù)據(jù)返回給客戶端。其實(shí)這種方案就是利用session,id值其實(shí)就是sessionid。那我們既然可以使用session進(jìn)行身份驗(yàn)證,我們?yōu)槭裁催€要選擇使用token呢?

    1.session是需要空間進(jìn)行存儲(chǔ)的,如果是多服務(wù)器session需要同步信息,但是token在服務(wù)器是可以不需要存儲(chǔ)用戶信息的。

    2.token可以使用瀏覽器的localStorge等,APP也可以使用自帶數(shù)據(jù)庫(kù)存儲(chǔ)字符串。且不會(huì)出現(xiàn)cookies出現(xiàn)跨域問(wèn)題。

    3.token可以用JWT來(lái)攜帶部分不太敏感的信息比如用戶ID等,服務(wù)器只要解密token即可使用部分信息。

        使用token驗(yàn)證機(jī)制講完了,那我們需要知道我們使用token驗(yàn)證的整個(gè)流程:

      1.當(dāng)用戶登錄成功之后, 服務(wù)器端就會(huì)通過(guò)指定算法生成一個(gè) token,過(guò)期時(shí)間48h,可以將token存儲(chǔ)在redis,再將這個(gè)token值返回給客戶端;

       2.客戶端拿到 token值之后,進(jìn)行保存;

       3.當(dāng)客戶端調(diào)用接口請(qǐng)求數(shù)據(jù)時(shí),就會(huì)攜帶 token值發(fā)送給服務(wù)器;

       4.服務(wù)器接收到客戶端的請(qǐng)求之后,會(huì)取出token值與保存在redis中的token值做對(duì)比。

        5.如果token對(duì)比成功,說(shuō)明用戶處于登錄狀態(tài),否則表示登錄狀態(tài)失效,需要用戶重新登陸。用戶每次重新登陸會(huì)刷新token的過(guò)期時(shí)間。

接下來(lái)我們用代碼來(lái)走一趟整個(gè)流程:

        首先我們實(shí)現(xiàn)登錄邏輯,這套沒(méi)什么好講的,可以去看看一篇文章:你不知道的前后端分離之交互(2)

什么是Token機(jī)制

用戶首次登錄去數(shù)據(jù)庫(kù)匹配賬號(hào)密碼,匹配成功會(huì)返回用戶唯一標(biāo)識(shí)uid,account這些基本數(shù)據(jù)。接下來(lái)我們需要去使用指定算法生成一個(gè)token

什么是Token機(jī)制

我們通過(guò)用戶app_sid以及account生成一個(gè)簡(jiǎn)單的token:TKN:3:Q:d:8zTEiTJEJ7dee:AOK_H5,然后去redis查詢以這個(gè)簡(jiǎn)單token為鍵值的token是否存在。

什么是Token機(jī)制

什么是Token機(jī)制

如果用戶token已存在redis中,則刪除這個(gè)token。然后生成新的token

什么是Token機(jī)制

將新token存儲(chǔ)到redis中,一樣采用鍵名為簡(jiǎn)單token,鍵值為最終生成的token。過(guò)期時(shí)間設(shè)置成48h

什么是Token機(jī)制

到這里我們生成token的操作就全部完善了。基本流程就是用戶登錄成功會(huì)以app_sidaccount先生成一個(gè)簡(jiǎn)單token,去redis查詢?cè)?strong>token是否存在。存在則刪除token,然后使用特定算法將簡(jiǎn)單token轉(zhuǎn)化成最終的token存儲(chǔ)到redis。然后給前端返回token進(jìn)行存儲(chǔ)。

什么是Token機(jī)制

可以看到我們成功將token返回給前端了。現(xiàn)在我們還需要一個(gè)驗(yàn)證token的接口。因?yàn)槲覀冎苯訉?strong>token存儲(chǔ)在redis中,所以接收到前端傳的token,我們可以直接去redis中查詢token是否存在,如果token存在,則代表用戶處于登錄狀態(tài),給前端返回?cái)?shù)據(jù)。否則登陸失敗,提示請(qǐng)先登錄。

什么是Token機(jī)制

        前端每次請(qǐng)求通用數(shù)據(jù)接口的時(shí)候,先驗(yàn)證token的有效性。這樣整套下來(lái)我們就可以實(shí)現(xiàn)基于token的權(quán)限驗(yàn)證。但是這套邏輯是有缺點(diǎn)的,因?yàn)槲覀兪褂?strong>token理論上服務(wù)端可以不進(jìn)行存儲(chǔ),直接指定加解密算法,我這里由于生成token使用的隨機(jī)算法,無(wú)法反向解密,所以只能存儲(chǔ)在redis中進(jìn)行處理。其實(shí)我覺(jué)得更好的方案是直接設(shè)計(jì)加解密算法,服務(wù)端使用加密算法生成token返回給前端,前端每次請(qǐng)求通用數(shù)據(jù)接口攜帶token,服務(wù)端直接接收前端的token進(jìn)行反向解密,如果解密成功則可以得到用戶的uid等基本信息,解密失敗則提示前端請(qǐng)先登錄。

到此,相信大家對(duì)“什么是Token機(jī)制”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享題目:什么是Token機(jī)制
鏈接地址:http://bm7419.com/article22/geisjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、網(wǎng)站內(nèi)鏈、云服務(wù)器全網(wǎng)營(yíng)銷推廣、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站