? ? ? ?最近一段時間,突然就生病了齿尽,一連休息了這么多天才緩過來勁。不禁生出病來入山倒灯节,病去如抽絲的感慨循头,因此決定以后的日子一定要多注意自己的身體,能鍛煉就要堅持做一些鍛煉炎疆。這段時間也想了許多事情卡骂,內(nèi)心也有許多沖動,總是感覺要做的東西太多形入,也想明白了以后要做些什么事情全跨。
? ? ? ?今天有空分享一個小的知識點。網(wǎng)站登錄后都要做一個驗證亿遂,保護網(wǎng)站的安全浓若。計算機技術(shù)發(fā)展這么多年渺杉,安全驗證的技術(shù)也是很多種,大家熟悉有: BaseAuth, Oauth, Oauth2七嫌,基于Token的認證等機制∩侔欤現(xiàn)在比較流行,大家常用的就是token認證的方式诵原。接下來說的就是Token驗證的機制英妓,關(guān)于這種機制只需要弄明白幾個問題,就可以搞清楚這種機制的原理及實現(xiàn)绍赛。首先是token生成及存儲的問題蔓纠,其次是token過期時間的問題,最后是怎么保證用戶使用狀態(tài)下token持續(xù)時間的一直有效吗蚌。
? ? ? ? token的生成一般是采用uuid保證唯一性腿倚,當用戶登錄時為其生成唯一的token,存儲一般保存在數(shù)據(jù)庫中蚯妇。token過期時間采用把token二次保存在cookie或session里面敷燎,根據(jù)cookie和session的過期時間去維護token的過期時間。至于采用那種存儲一般需要根據(jù)應用程序部署的環(huán)境箩言,如果你的應用部署在多臺機器上硬贯,使用nginx進行負載均衡,那么需要把token二次保存在cookie中陨收。
? ? ? ? 最后一個問題的解決需要依賴框架的一種機制饭豹,大家應該都挺熟悉的,那就是aop技術(shù)(面向切面編程)务漩,在Yii2框架里面一般采用behavior來實現(xiàn)拄衰,主要內(nèi)容就是在給用戶行為的api controller添加一個before action。在action里面饵骨,從cookie中獲取token,拿取用戶信息翘悉,如果用戶有操作的權(quán)限,就根據(jù)當前時間去更新cookie的過期時間宏悦,從而維護token的持續(xù)時間镐确,使得token在給定時間內(nèi)不會過期,這樣可以使用戶的操作體驗達到最佳饼煞,又能起到保護程序安全的作用源葫。