ASP.NET Core 双因素验证2FA 实战经验分享
必讀
本文源碼核心邏輯使用AspNetCore.Totp,為什么不使用AspNetCore.Totp而是使用源碼封裝后面將會說明。
為了防止不提供原網(wǎng)址的轉(zhuǎn)載,特在這里加上原文鏈接:
雙因素認(rèn)證
雙因素身份認(rèn)證就是通過你所知道再加上你所能擁有的這二個要素組合到一起才能發(fā)揮作用的身份認(rèn)證系統(tǒng)。雙因素認(rèn)證是一種采用時間同步技術(shù)的系統(tǒng),采用了基于時間、事件和密鑰三變量而產(chǎn)生的一次性密碼來代替?zhèn)鹘y(tǒng)的靜態(tài)密碼。每個動態(tài)密碼卡都有一個唯一的密鑰,該密鑰同時存放在服務(wù)器端,每次認(rèn)證時動態(tài)密碼卡與服務(wù)器分別根據(jù)同樣的密鑰,同樣的隨機(jī)參數(shù)(時間、事件)和同樣的算法計算了認(rèn)證的動態(tài)密碼,從而確保密碼的一致性,從而實(shí)現(xiàn)了用戶的認(rèn)證。就像我們?nèi)ャy行辦卡送的口令牌.
一. 前言
最近公司內(nèi)部SSO登錄一直在找一種安全的方式,目前已實(shí)現(xiàn)方案:賬號密碼登錄以及手機(jī)驗(yàn)證碼登錄,通過Apollo切換不同的登錄方式,想起18年看到AspNetCore.Totp并也編寫了DemodotNetCore-2FA登錄,將之前寫的再完善并且在此記錄和分析,希望對大家有些幫助。
二. AspNetCore.Totp
說明一下為什么要用AspNetCore.Totp修改并且重新打包Brook.Totp因AspNetCore.Totp在生成二維碼鏈接時會訪問404(google.com)網(wǎng)站,國內(nèi)基本無法使用,這很不清真,還有就是注入需要注入接口和實(shí)現(xiàn)類,使用起來很繁瑣,所以才萌生了讓使用起來更方便,并且不依賴Google生成二維碼的想法
1.生成二維碼
accountIdentity = accountIdentity.Replace(" ", "");var encodedSecretKey = Base32.Encode(accountSecretKey);var provisionUrl = UrlEncoder.Encode(string.Format("otpauth://totp/{0}?secret={1}&issuer={2}", accountIdentity, encodedSecretKey, UrlEncoder.Encode(issuer)));var protocol = useHttps ? "https" : "http";var url = $"{protocol}://chart.googleapis.com/chart?cht=qr&chs={qrCodeWidth}x{qrCodeHeight}&chl={provisionUrl}";var totpSetup = new TotpSetup{QrCodeImage = this.GetQrImage(url),ManualSetupKey = encodedSecretKey};2.注入方式
Startup注入
Controller注入
三. Brook.Totp
1.二維碼使用QRCoder來生成,不依賴外部網(wǎng)絡(luò)
/// <summary>/// 生成二維碼/// </summary>/// <param name="provisionUrl"></param>/// <param name="pixelsPerModule"></param>/// <returns></returns>private string GetQrBase64Imageg(string provisionUrl,int pixelsPerModule){QRCodeGenerator qrGenerator = new QRCodeGenerator();QRCodeData qrCodeData = qrGenerator.CreateQrCode(provisionUrl, QRCodeGenerator.ECCLevel.Q);Base64QRCode qrCode = new Base64QRCode(qrCodeData);string qrCodeImageAsBase64 = qrCode.GetGraphic(2);return $"data:image/png;base64,{qrCodeImageAsBase64}";}2.注入方式
Startup注入
Controller注入
四.雙因素APP
推薦使用Microsoft Authenticator支持IOS、安卓可自動備份
五. 完整流程效果圖
使用Microsoft Authenticator
正常登錄
登錄成功后綁定,使用Microsoft Authenticator掃描二維碼,然后輸入顯示的6位數(shù)字驗(yàn)證碼
綁定后再次登錄
六.如何使用
所有源代碼請參照我的GitHub?https://github.com/yuefengkai/Brook.Totp
EF Core In Memory Database所有的數(shù)據(jù)只存在內(nèi)存中
Cache in-memory
dotNET Core Authentication
下方只展示部分代碼
1.新建netCoreMVC項(xiàng)目添加Nuget包Brook.Totp
2.注入方式
Startup注入
Controller使用
七.寫在最后
以上所有源代碼已開源在?https://github.com/yuefengkai/Brook.Totp
作者:Brook
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 双因素验证2FA 实战经验分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员过关斩将--cookie和sess
- 下一篇: 结合“性能监视器” 排查、处理性能瓶颈导