摘要:的身份驗證器一般也是用于登錄進行兩步驗證,和蘋果的兩步驗證是同樣的道理。只不過的身份驗證器用得更多更廣泛,如的兩步驗證都是基于身份驗證器。使用我們來看下上的使用身份驗證器開啟兩步驗證的應(yīng)用。
兩步驗證
大家應(yīng)該對兩步驗證都熟悉吧?如蘋果有自帶的兩步驗證策略,防止用戶賬號密碼被盜而鎖定手機進行敲詐,這種例子屢見不鮮,所以蘋果都建議大家開啟兩步驗證的。
Google 的身份驗證器一般也是用于登錄進行兩步驗證,和蘋果的兩步驗證是同樣的道理。只不過 Google 的身份驗證器用得更多更廣泛,如 GitHub 的兩步驗證都是基于 Google 身份驗證器。
Google Authenticator 簡介Google Authenticator 身份驗證器是一款基于時間與哈希的一次性密碼算法的兩步驗證軟件令牌,用戶需要下載手機 APP(Authenticator),該手機 APP 與網(wǎng)站進行綁定,當(dāng)網(wǎng)站驗證完用戶名和密碼之后會驗證此 APP 上對應(yīng)生成的 6 位驗證碼數(shù)字,驗證通過則成功登錄,否則登錄失敗。
Google Authenticator 使用我們來看下 Github 上的使用 Google 身份驗證器開啟兩步驗證的應(yīng)用。
如圖所示,默認 Github 是沒有開啟兩步驗證的,點擊設(shè)置按鈕進行設(shè)置。
Github 提供了基于 APP (谷歌身份驗證器)和短信驗證碼兩種兩步驗證的方式,我們選擇第一種谷歌身份驗證器。
進入第一種驗證模式,接下來展示了一堆的恢復(fù)碼,用來當(dāng) APP 驗證器不能工作的緊急情況使用。把它們保存起來,然后點擊下一步。
這個就是身份驗證器的關(guān)鍵了,下載 Google 的 Authenticator APP,然后掃描這個二維碼進行綁定。
綁定之后,APP Github 模塊下面會顯示一個 6 位的驗證碼,把它輸入到上面那個框里面就行了。
如下圖所示,已經(jīng)成功開啟兩步驗證了。
接下來我們退出 Github 再重新登錄,頁面就會提示要輸入 Google 的身份驗證器驗證碼了,如果 APP 不能正常工作,最下方還能通過之前保存下來的恢復(fù)碼進行登錄。
好了,Google Authenticator 使用就到這里,那它是如何工作的,它是什么原理呢?我們的網(wǎng)站、APP 如何接入 Google Authenticator,接下來我們一一拉開謎底。
Google Authenticator 工作流程實際上 Google Authenticator 采用的是 TOTP 算法(Time-Based One-Time Password,即基于時間的一次性密碼),其核心內(nèi)容包括以下三點。
1、安全密鑰
是客戶端和服務(wù)端約定的安全密鑰,也是手機端 APP 身份驗證器綁定(手機端通過掃描或者手輸安全密鑰進行綁定)和驗證碼的驗證都需要的一個唯一的安全密鑰,該密鑰由加密算法生成,并最后由 Base32 編碼而成。
2、驗證時間
Google 選擇了 30 秒作為時間片,T的數(shù)值為 從Unix epoch(1970年1月1日 00:00:00)來經(jīng)歷的 30 秒的個數(shù),所以在 Google Authenticator 中我們可以看見驗證碼每個 30 秒就會刷新一次。
更詳細原理參考:
https://blog.seetee.me/post/2...
3、簽署算法
Google 使用的是 HMAC-SHA1 算法,全稱是:Hash-based message authentication code(哈希運算消息認證碼),它是以一個密鑰和一個消息為輸入,生成一個消息摘要作為輸出,這里以 SHA1 算法作為消息輸入。
使用 HMAC 算法是因為只有用戶本身知道正確的輸入密鑰,因此會得到唯一的輸出,其算法可以簡單表示為:
hmac = SHA1(secret + SHA1(secret + input))
事實上,TOTP 是 HMAC-OTP(基于HMAC的一次密碼生成)的超集,區(qū)別是 TOTP 是以當(dāng)前時間作為輸入,而HMAC-OTP 則是以自增計算器作為輸入,該計數(shù)器使用時需要進行同步。
Google Authenticator 實戰(zhàn)知道上面的原理,我們就可以來應(yīng)用實戰(zhàn)了。
/** * 微信公眾號:Java技術(shù)棧 */ public class AuthTest { @Test public void genSecretTest() { String secret = GoogleAuthenticator.generateSecretKey(); String qrcode = GoogleAuthenticator.getQRBarcodeURL("Java技術(shù)棧", "javastack.cn", secret); System.out.println("二維碼地址:" + qrcode); System.out.println("密鑰:" + secret); } @Test public void verifyTest() { String secret = "ZJTAQGLVOZ7ATWH2"; long code = 956235; GoogleAuthenticator ga = new GoogleAuthenticator(); boolean r = ga.verifCode(secret, code); System.out.println("是否正確:" + r); } }
第一個方法是生成密鑰和一個掃描二維碼綁定的URL。
第二個方法是根據(jù)密鑰和驗證碼進行驗證。
這里僅提供一下 GoogleAuthenticator 類的源碼邏輯參考。
http://awtqty-zhang.iteye.com...
如果有收獲歡迎點贊轉(zhuǎn)發(fā),也可以留言發(fā)表你的疑問和看法。
教程:史上最強 Spring Boot & Cloud 教程匯總
工具:推薦一款在線創(chuàng)作流程圖、思維導(dǎo)圖軟件
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76819.html
摘要:框架具有輕便,開源的優(yōu)點,所以本譯見構(gòu)建用戶管理微服務(wù)五使用令牌和來實現(xiàn)身份驗證往期譯見系列文章在賬號分享中持續(xù)連載,敬請查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:閱讀本篇文章你可以了解到谷歌驗證器的實現(xiàn)原理,并且可以自己使用實現(xiàn)支持谷歌驗證器的兩步驗證。并且發(fā)現(xiàn),除了的兩步驗證之外,其它兩步驗證很多能看到谷歌驗證器的身影。 showImg(https://segmentfault.com/img/bV6UIW?w=540&h=238); 閱讀本篇文章你可以了解到谷歌驗證器的實現(xiàn)原理,并且可以自己使用node.js實現(xiàn)支持谷歌驗證器的兩步驗證。 ...
摘要:閱讀本篇文章你可以了解到谷歌驗證器的實現(xiàn)原理,并且可以自己使用實現(xiàn)支持谷歌驗證器的兩步驗證。并且發(fā)現(xiàn),除了的兩步驗證之外,其它兩步驗證很多能看到谷歌驗證器的身影。 showImg(https://segmentfault.com/img/bV6UIW?w=540&h=238); 閱讀本篇文章你可以了解到谷歌驗證器的實現(xiàn)原理,并且可以自己使用node.js實現(xiàn)支持谷歌驗證器的兩步驗證。 ...
摘要:背景近年來,隨著阿里新業(yè)務(wù)新技術(shù)的快速發(fā)展,傳統(tǒng)的業(yè)務(wù)總量監(jiān)控大盤已經(jīng)越來越不能滿足監(jiān)控需求,主要表現(xiàn)在以下幾個方面缺乏全局視角監(jiān)控大盤主要反映的是單個業(yè)務(wù)或應(yīng)用的運行狀態(tài),缺少全局的業(yè)務(wù)視角能反應(yīng)整個業(yè)務(wù)域的上下游整體的運行情況。 背景 近年來,隨著阿里新業(yè)務(wù)、新技術(shù)的快速發(fā)展,傳統(tǒng)的業(yè)務(wù)總量監(jiān)控大盤已經(jīng)越來越不能滿足監(jiān)控需求,主要表現(xiàn)在以下幾個方面: 缺乏全局視角:監(jiān)控大盤主要反映...
閱讀 2813·2023-04-25 15:01
閱讀 3012·2021-11-23 10:07
閱讀 3357·2021-10-12 10:12
閱讀 3444·2021-08-30 09:45
閱讀 2183·2021-08-20 09:36
閱讀 3566·2019-08-30 12:59
閱讀 2424·2019-08-26 13:52
閱讀 927·2019-08-26 13:24