成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

說(shuō)一說(shuō)幾種登錄認(rèn)證方式,你用的哪一種

idealcn / 1370人閱讀

摘要:登錄認(rèn)證幾乎是任何一個(gè)系統(tǒng)的標(biāo)配,系統(tǒng)客戶端等,好多都需要注冊(cè)登錄授權(quán)認(rèn)證。假設(shè)我們開發(fā)了一個(gè)電商平臺(tái),并集成了微信登錄,以這個(gè)場(chǎng)景為例,說(shuō)一下的工作原理。微信網(wǎng)頁(yè)授權(quán)是授權(quán)碼模式的授權(quán)模式。

登錄認(rèn)證幾乎是任何一個(gè)系統(tǒng)的標(biāo)配,web 系統(tǒng)、APP、PC 客戶端等,好多都需要注冊(cè)、登錄、授權(quán)認(rèn)證。
場(chǎng)景說(shuō)明

以一個(gè)電商系統(tǒng),假設(shè)淘寶為例,如果我們想要下單,首先需要注冊(cè)一個(gè)賬號(hào)。擁有了賬號(hào)之后,我們需要輸入用戶名(比如手機(jī)號(hào)或郵箱)、密碼完成登錄過(guò)程。之后如果你在一段時(shí)間內(nèi)再次進(jìn)入系統(tǒng),是不需要輸入用戶名和密碼的,只有在連續(xù)長(zhǎng)時(shí)間不登錄的情況下(例如一個(gè)月沒登錄過(guò))訪問(wèn)系統(tǒng),再次需要輸入用戶名和密碼。如果使用頻率很頻繁,通常是一年都不用再輸一次密碼,所以經(jīng)常在換了一臺(tái)電腦或者一部手機(jī)之后,一些經(jīng)常使用的網(wǎng)站或 APP 不記得密碼了。

提煉出來(lái)整個(gè)過(guò)程大概就是如下幾步:

首次使用,需要通過(guò)郵箱或手機(jī)號(hào)注冊(cè);

注冊(cè)完成后,需要提供用戶名和密碼完成登錄;

下次再使用,通常不會(huì)再次輸入用戶名和密碼即可直接進(jìn)入系統(tǒng)并使用其功能(除非連續(xù)長(zhǎng)時(shí)間未使用);

常用的認(rèn)證方式 OAuth 認(rèn)證

OAuth 認(rèn)證比較常見的就是微信登錄、微博登錄、qq登錄等,簡(jiǎn)單來(lái)說(shuō)就是利用這些比較權(quán)威的網(wǎng)站或應(yīng)用開放的 API 來(lái)實(shí)現(xiàn)用戶登錄,用戶可以不用在你的網(wǎng)站或應(yīng)用上注冊(cè)賬號(hào),直接用已有的微信、微博、qq 等賬號(hào)登錄。

這一樣一來(lái),即省了用戶注冊(cè)的時(shí)間,又簡(jiǎn)化了你的系統(tǒng)的賬號(hào)體系。從而既可以提高用戶注冊(cè)率可以節(jié)省開發(fā)時(shí)間,同時(shí),安全性也有了保障。

維基百科對(duì)它的解釋摘要如下:

OAuth允許用戶提供一個(gè)令牌,而不是用戶名和密碼來(lái)訪問(wèn)他們存放在特定服務(wù)提供者的數(shù)據(jù)。每一個(gè)令牌授權(quán)一個(gè)特定的網(wǎng)站(例如,視頻編輯網(wǎng)站)在特定的時(shí)段(例如,接下來(lái)的2小時(shí)內(nèi))內(nèi)訪問(wèn)特定的資源(例如僅僅是某一相冊(cè)中的視頻)。這樣,OAuth讓用戶可以授權(quán)第三方網(wǎng)站訪問(wèn)他們存儲(chǔ)在另外服務(wù)提供者的某些特定信息,而非所有內(nèi)容。

假設(shè)我們開發(fā)了一個(gè)電商平臺(tái),并集成了微信登錄,以這個(gè)場(chǎng)景為例,說(shuō)一下 OAuth 的工作原理。

講之前需要了解其中涉及到的幾個(gè)角色:

用戶:即使用我們平臺(tái)的用戶

用戶終端:即最終用戶使用的 APP 端或 web 端

應(yīng)用服務(wù)器端:即我們的服務(wù)器端

授權(quán)服務(wù)器端:這里就是微信處理授權(quán)請(qǐng)求的服務(wù)器

好的,接下來(lái)開始在我們的電商平臺(tái)web端實(shí)現(xiàn)微信登錄功能。微信網(wǎng)頁(yè)授權(quán)是授權(quán)碼模式(authorization code)的 OAuth 授權(quán)模式。

我們電商平臺(tái)的用戶過(guò)來(lái)登錄,常用場(chǎng)景是點(diǎn)擊“微信登錄”按鈕;

接下來(lái),用戶終端將用戶引導(dǎo)到微信授權(quán)頁(yè)面;

用戶同意授權(quán),應(yīng)用服務(wù)器重定向到之前設(shè)置好的 redirect_uri (應(yīng)用服務(wù)器所在的地址),并附帶上授權(quán)碼(code);

應(yīng)用服務(wù)器用上一步獲取的 code 向微信授權(quán)服務(wù)器發(fā)送請(qǐng)求,獲取 access_token,也就是上面說(shuō)的令牌;

之后應(yīng)用服務(wù)器用上一步獲取的 access_token 去請(qǐng)求微信授權(quán)服務(wù)器獲取用戶的基本信息,例如頭像、昵稱等;

Cookie-Session 認(rèn)證

早期互聯(lián)網(wǎng)以 web 為主,客戶端是瀏覽器,所以 Cookie-Session 方式最那時(shí)候最常用的方式,直到現(xiàn)在,一些 web 網(wǎng)站依然用這種方式做認(rèn)證。

認(rèn)證過(guò)程大致如下:

用戶輸入用戶名、密碼或者用短信驗(yàn)證碼方式登錄系統(tǒng);

服務(wù)端驗(yàn)證后,創(chuàng)建一個(gè) Session 信息,并且將 SessionID 存到 cookie,發(fā)送回瀏覽器;

下次客戶端再發(fā)起請(qǐng)求,自動(dòng)帶上 cookie 信息,服務(wù)端通過(guò) cookie 獲取 Session 信息進(jìn)行校驗(yàn);

弊端

只能在 web 場(chǎng)景下使用,如果是 APP 中,不能使用 cookie 的情況下就不能用了;

即使能在 web 場(chǎng)景下使用,也要考慮跨域問(wèn)題,因?yàn)?cookie 不能跨域;

cookie 存在 CSRF(跨站請(qǐng)求偽造)的風(fēng)險(xiǎn);

如果是分布式服務(wù),需要考慮 Session 同步問(wèn)題;

Cookie-Session 改造版

由于傳統(tǒng)的 Cookie-Session 認(rèn)證存在諸多問(wèn)題,可以把上面的方案改造一下。改動(dòng)的地方如下:

不用 cookie 做客戶端存儲(chǔ),改用其他方式,web 下使用 local storage,APP 中使用客戶端數(shù)據(jù)庫(kù),這樣就實(shí)現(xiàn)了跨域,并且避免了 CSRF ;

服務(wù)端也不存 Session 了,把 Session 信息拿出來(lái)存到 Redis 等內(nèi)存數(shù)據(jù)庫(kù)中,這樣即提高了速度,又避免了 Session 同步問(wèn)題;

經(jīng)過(guò)改造之后變成了如下的認(rèn)證過(guò)程:

用戶輸入用戶名、密碼或者用短信驗(yàn)證碼方式登錄系統(tǒng);

服務(wù)端經(jīng)過(guò)驗(yàn)證,將認(rèn)證信息構(gòu)造好的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)到 Redis 中,并將 key 值返回給客戶端;

客戶端拿到返回的 key,存儲(chǔ)到 local storage 或本地?cái)?shù)據(jù)庫(kù);

下次客戶端再次請(qǐng)求,把 key 值附加到 header 或者 請(qǐng)求體中;

服務(wù)端根據(jù)獲取的 key,到 Redis 中獲取認(rèn)證信息;

基于JWT的Token認(rèn)證

上面的方案雖然經(jīng)過(guò)了改版,但還是需要客戶端和服務(wù)器端維持一個(gè)狀態(tài)信息,比如用 cookie 換 session ,或者用 key 換 Redis 的 value 信息,基于 JWT 的 Token 認(rèn)證方案可以省去這個(gè)過(guò)程。

JSON Web Token(JWT)是一個(gè)非常輕巧的規(guī)范。這個(gè)規(guī)范允許我們使用JWT在用戶和服務(wù)器之間傳遞安全可靠的信息。

認(rèn)證過(guò)程

依然是用戶登錄系統(tǒng);

服務(wù)端驗(yàn)證,將認(rèn)證信息通過(guò)指定的算法(例如HS256)進(jìn)行加密,例如對(duì)用戶名和用戶所屬角色進(jìn)行加密,加密私鑰是保存在服務(wù)器端的,將加密后的結(jié)果發(fā)送給客戶端,加密的字符串格式為三個(gè)"." 分隔的字符串 Token,分別對(duì)應(yīng)頭部、載荷簽名,頭部和載荷都可以通過(guò) base64 解碼出來(lái),簽名部分不可以;

客戶端拿到返回的 Token,存儲(chǔ)到 local storage 或本地?cái)?shù)據(jù)庫(kù);

下次客戶端再次發(fā)起請(qǐng)求,將 Token 附加到 header 中;

服務(wù)端獲取 header 中的 Token ,通過(guò)相同的算法對(duì) Token 中的用戶名和所屬角色進(jìn)行相同的加密驗(yàn)證,如果驗(yàn)證結(jié)果相同,則說(shuō)明這個(gè)請(qǐng)求是正常的,沒有被篡改。這個(gè)過(guò)程可以完全不涉及到查詢 Redis 或其他存儲(chǔ);

優(yōu)點(diǎn)

使用 json 作為數(shù)據(jù)傳輸,有廣泛的通用型,并且體積小,便于傳輸;

不需要在服務(wù)器端保存相關(guān)信息;

jwt 載荷部分可以存儲(chǔ)業(yè)務(wù)相關(guān)的信息(非敏感的),例如用戶信息、角色等;

總結(jié)

綜上所述,JWT 可以作為首選的認(rèn)證方案。當(dāng)然,具體的情況具體分析,還要看是不是適合真實(shí)的應(yīng)用場(chǎng)景。除了上述的這些,涉及到信息安全的,建議全部采用 https 方式部署,采用 https 方式,信息很難被嗅探破解,對(duì)應(yīng)用的安全性很重要。

參考信息:

OAuth: http://www.ruanyifeng.com/blo...

JWT:https://jwt.io/introduction/ http://blog.leapoahead.com/20...

JWT Java 庫(kù): https://github.com/jwtk/jjwt

別等了,掃碼上車吧。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68427.html

相關(guān)文章

  • 2019-我的前端面試題

    摘要:先說(shuō)下我面試情況,我一共面試了家公司。篇在我面試的眾多公司里,只有同城的面問(wèn)到相關(guān)問(wèn)題,其他公司壓根沒問(wèn)。我自己回答的是自己開發(fā)組件面臨的問(wèn)題。完全不用擔(dān)心對(duì)方到時(shí)候打電話核對(duì)的問(wèn)題。 2019的5月9號(hào),離發(fā)工資還有1天的時(shí)候,我的領(lǐng)導(dǎo)親切把我叫到辦公室跟我說(shuō):阿郭,我們公司要倒閉了,錢是沒有的啦,為了不耽誤你,你趕緊出去找工作吧。聽到這話,我虎軀一震,這已經(jīng)是第2個(gè)月沒工資了。 公...

    iKcamp 評(píng)論0 收藏0
  • Python 爬蟲面試題 170 道:2019 版

    摘要:下面代碼會(huì)存在什么問(wèn)題,如何改進(jìn)一行代碼輸出之間的所有偶數(shù)。簡(jiǎn)述進(jìn)程之間如何通信多路復(fù)用的作用模型的區(qū)別什么是并發(fā)和并行解釋什么是異步非阻塞的作用面試題說(shuō)說(shuō)你知道的命令如何查看某次提交修改的內(nèi)容答案掃碼下面的二維碼訂閱即可獲取。 引言 最近在刷面試題,所以需要看大量的 Python 相關(guān)的面試題,從大量的題目中總結(jié)了很多的知識(shí),同時(shí)也對(duì)一些題目進(jìn)行拓展了,但是在看了網(wǎng)上的大部分面試題不...

    trigkit4 評(píng)論0 收藏0
  • 通過(guò)面試題,讓我們來(lái)了解Collection

    摘要:說(shuō)一說(shuō)迭代器通過(guò)集合對(duì)象獲取其對(duì)應(yīng)的對(duì)象判斷是否存在下一個(gè)元素取出該元素并將迭代器對(duì)象指向下一個(gè)元素取出元素的方式迭代器。對(duì)于使用容器者而言,具體的實(shí)現(xiàn)不重要,只要通過(guò)容器獲取到該實(shí)現(xiàn)的迭代器的對(duì)象即可,也就是方法。 前言 歡迎關(guān)注微信公眾號(hào):Coder編程獲取最新原創(chuàng)技術(shù)文章和相關(guān)免費(fèi)學(xué)習(xí)資料,隨時(shí)隨地學(xué)習(xí)技術(shù)知識(shí)!** 本章主要介紹Collection集合相關(guān)知識(shí),結(jié)合面試中會(huì)提到...

    HelKyle 評(píng)論0 收藏0
  • 前端面試總結(jié)(at, md)

    摘要:面試官比較著急了,跟我溝通的時(shí)候,我才知道返回值不一定非要跟原生的一樣。騰訊一面平常開發(fā)怎么設(shè)計(jì)組件的??偨Y(jié)騰訊面試的感覺就是,沒有那么正式,都是部門的技術(shù)直接聯(lián)系的你,然后二面就是部門負(fù)責(zé)人了,決定了是否入職。 引入 面試過(guò)去了這么久,把八月份面試題和總結(jié)發(fā)一下吧,雖然年底大家可能都不換工作~ 還是可以看看的。 關(guān)于面試,引用葉老濕的一句話。你的簡(jiǎn)歷是自己工作的答卷,項(xiàng)目經(jīng)歷是你給面...

    zhunjiee 評(píng)論0 收藏0
  • 說(shuō)一說(shuō)“換行”踩的坑

    摘要:雖然效果一樣,但是這兩種換行的方式使用起來(lái)卻不同。使用換行這種方式用起來(lái)比較坑,所以本文章的重點(diǎn)就是這一部分。因?yàn)橹爸缽椏蛑幸獙?shí)現(xiàn)換行,只能通過(guò)的方式,而不能通過(guò)的方式。在元素上使用等方式,發(fā)現(xiàn)都是可以實(shí)現(xiàn)換行的。 前言 最近遇到這樣一個(gè)需求:需要在頁(yè)面中顯示一段第三方文本信息。這些文本完全由第三方自己定義,我們負(fù)責(zé)顯示在頁(yè)面即可,第三方要求這些文本需要換行顯示即可。 我們都知道在...

    objc94 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<