基于Token进行身份验证
1.基于服務(wù)器的驗(yàn)證
我們都是知道HTTP協(xié)議是無(wú)狀態(tài)的,這種無(wú)狀態(tài)意味著程序需要驗(yàn)證每一次請(qǐng)求,從而辨別客戶端的身份。? 在這之前,程序都是通過(guò)在服務(wù)端存儲(chǔ)的登錄信息來(lái)辨別請(qǐng)求的。這種方式一般都是通過(guò)存儲(chǔ)Session來(lái)完成。
基于服務(wù)器驗(yàn)證方式暴露的一些問(wèn)題:
1.Seesion:每次認(rèn)證用戶發(fā)起請(qǐng)求時(shí),服務(wù)器需要去創(chuàng)建一個(gè)記錄來(lái)存儲(chǔ)信息。當(dāng)越來(lái)越多的用戶發(fā)請(qǐng)求時(shí),內(nèi)存的開(kāi)銷也會(huì)不斷增加。
2.可擴(kuò)展性:在服務(wù)端的內(nèi)存中使用Seesion存儲(chǔ)登錄信息,伴隨而來(lái)的是可擴(kuò)展性問(wèn)題。
3.CORS(跨域資源共享):當(dāng)我們需要讓數(shù)據(jù)跨多臺(tái)移動(dòng)設(shè)備上使用時(shí),跨域資源的共享會(huì)是一個(gè)讓人頭疼的問(wèn)題。在使用Ajax抓取另一個(gè)域的資源,就可以會(huì)出現(xiàn)禁止請(qǐng)求的情況。
4.CSRF(跨站請(qǐng)求偽造):用戶在訪問(wèn)銀行網(wǎng)站時(shí),他們很容易受到跨站請(qǐng)求偽造的攻擊,并且能夠被利用其訪問(wèn)其他的網(wǎng)站。在這些問(wèn)題中,可擴(kuò)展性是最突出的。因此我們有必要去尋求一種更有行之有效的方法。
2.基于Token的身份驗(yàn)證
使用基于 Token 的身份驗(yàn)證方法,在服務(wù)端不需要存儲(chǔ)用戶的登錄記錄。大概的流程是這樣的:?
1.客戶端使用用戶名跟密碼請(qǐng)求登錄?
2.服務(wù)端收到請(qǐng)求,去驗(yàn)證用戶名與密碼驗(yàn)證成功后,服務(wù)端會(huì)簽發(fā)一個(gè) Token,再把這個(gè) Token 發(fā)送給客戶端?
3.客戶端收到 Token 以后可以把它存儲(chǔ)起來(lái),比如放在 Cookie 里或者 Local Storage 里客戶端每次向服務(wù)端請(qǐng)求資源的時(shí)候需要帶著服務(wù)端簽發(fā)的 Token服務(wù)端收到請(qǐng)求,然后去驗(yàn)證客戶端請(qǐng)求里面帶著的 Token,如果驗(yàn)證成功,就向客戶端返回請(qǐng)求的數(shù)據(jù)。
基于Token驗(yàn)證的優(yōu)勢(shì):
1.無(wú)狀態(tài)、可擴(kuò)展
在客戶端存儲(chǔ)的Token是無(wú)狀態(tài)的,并且能夠被擴(kuò)展。基于這種無(wú)狀態(tài)和不存儲(chǔ)Session信息,負(fù)載均衡器能夠?qū)⒂脩粜畔囊粋€(gè)服務(wù)傳到其他服務(wù)器上。如果我們將已驗(yàn)證的用戶的信息保存在Session中,則每次請(qǐng)求都需要用戶向已驗(yàn)證的服務(wù)器發(fā)送驗(yàn)證信息(稱為Session親和性)。用戶量大時(shí),可能會(huì)造成
一些擁堵。
2.安全性請(qǐng)求中發(fā)送token而不再是發(fā)送cookie能夠防止CSRF(跨站請(qǐng)求偽造)。即使在客戶端使用cookie存儲(chǔ)token,cookie也僅僅是一個(gè)存儲(chǔ)機(jī)制而不是用于認(rèn)證。不將信息存儲(chǔ)在Session中,讓我們少了對(duì)session操作。token是有時(shí)效的,一段時(shí)間之后用戶需要重新驗(yàn)證。我們也不一定需要等到token自動(dòng)失效,token有撤回的操作,通過(guò)token revocataion可以使一個(gè)特定的token或是一組有相同認(rèn)證的token無(wú)效。
3.可擴(kuò)展性Tokens能夠創(chuàng)建與其它程序共享權(quán)限的程序。例如,能將一個(gè)隨便的社交帳號(hào)和自己的大號(hào)(Fackbook或是Twitter)聯(lián)系起來(lái)。當(dāng)通過(guò)服務(wù)登錄Twitter(我們將這個(gè)過(guò)程Buffer)時(shí),我們可以將這些Buffer附到Twitter的數(shù)據(jù)流上(we are allowing Buffer to post to our Twitter stream)。
使用tokens時(shí),可以提供可選的權(quán)限給第三方應(yīng)用程序。當(dāng)用戶想讓另一個(gè)應(yīng)用程序訪問(wèn)它們的數(shù)據(jù),我們可以通過(guò)建立自己的API,得出特殊權(quán)限的tokens。
4.多平臺(tái)跨域我們提前先來(lái)談?wù)撘幌翪ORS(跨域資源共享),對(duì)應(yīng)用程序和服務(wù)進(jìn)行擴(kuò)展的時(shí)候,需要介入各種各種的設(shè)備和應(yīng)用程序。
Having our API just serve data, we can also make the design choice to serve assets from a CDN.
This eliminates the issues that CORS brings up after we set a quick header configuration for our application.
只要用戶有一個(gè)通過(guò)了驗(yàn)證的token,數(shù)據(jù)和資源就能夠在任何域上被請(qǐng)求到。
Access-Control-Allow-Origin: *
5.基于標(biāo)準(zhǔn)
創(chuàng)建token的時(shí)候,你可以設(shè)定一些選項(xiàng)。我們?cè)诤罄m(xù)的文章中會(huì)進(jìn)行更加詳盡的描述,但是標(biāo)準(zhǔn)的用法會(huì)在JSON Web Tokens體現(xiàn)。最近的程序和文檔是供給JSON Web Tokens的。它支持眾多的語(yǔ)言。這意味在未來(lái)的使用中你可以真正的轉(zhuǎn)換你的認(rèn)證機(jī)制。總結(jié)
以上是生活随笔為你收集整理的基于Token进行身份验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 知乎怎么删除回答
- 下一篇: Package require os(d