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