日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

两步验证杀手锏:Java 接入 Google 身份验证器实战

發(fā)布時(shí)間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两步验证杀手锏:Java 接入 Google 身份验证器实战 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自? ?兩步驗(yàn)證殺手锏:Java 接入 Google 身份驗(yàn)證器實(shí)戰(zhàn)

什么是兩步驗(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 簡(jiǎn)介

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 再重新登錄,頁(yè)面就會(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/2011/google-two-step-verification/

3、簽署算法

Google 使用的是 HMAC-SHA1 算法,全稱是:Hash-based message authentication code(哈希運(yùn)算消息認(rèn)證碼),它是以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出,這里以 SHA1 算法作為消息輸入。

使用 HMAC 算法是因?yàn)橹挥杏脩舯旧碇勒_的輸入密鑰,因此會(huì)得到唯一的輸出,其算法可以簡(jiǎn)單表示為:

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?{@Testpublic?void?genSecretTest()?{String?secret?=?GoogleAuthenticator.generateSecretKey();String?qrcode?=?GoogleAuthenticator.getQRBarcodeURL("Java技術(shù)棧",?"javastack.cn",?secret);System.out.println("二維碼地址:"?+?qrcode);System.out.println("密鑰:"?+?secret);}@Testpublic?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/blog/1986275

總結(jié)

以上是生活随笔為你收集整理的两步验证杀手锏:Java 接入 Google 身份验证器实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。