ASP.NET Core 双因素验证2FA 实战经验分享
必讀
本文源碼核心邏輯使用AspNetCore.Totp,為什么不使用AspNetCore.Totp而是使用源碼封裝后面將會說明。
為了防止不提供原網址的轉載,特在這里加上原文鏈接:
雙因素認證
雙因素身份認證就是通過你所知道再加上你所能擁有的這二個要素組合到一起才能發揮作用的身份認證系統。雙因素認證是一種采用時間同步技術的系統,采用了基于時間、事件和密鑰三變量而產生的一次性密碼來代替傳統的靜態密碼。每個動態密碼卡都有一個唯一的密鑰,該密鑰同時存放在服務器端,每次認證時動態密碼卡與服務器分別根據同樣的密鑰,同樣的隨機參數(時間、事件)和同樣的算法計算了認證的動態密碼,從而確保密碼的一致性,從而實現了用戶的認證。就像我們去銀行辦卡送的口令牌.
一. 前言
最近公司內部SSO登錄一直在找一種安全的方式,目前已實現方案:賬號密碼登錄以及手機驗證碼登錄,通過Apollo切換不同的登錄方式,想起18年看到AspNetCore.Totp并也編寫了DemodotNetCore-2FA登錄,將之前寫的再完善并且在此記錄和分析,希望對大家有些幫助。
二. AspNetCore.Totp
說明一下為什么要用AspNetCore.Totp修改并且重新打包Brook.Totp因AspNetCore.Totp在生成二維碼鏈接時會訪問404(google.com)網站,國內基本無法使用,這很不清真,還有就是注入需要注入接口和實現類,使用起來很繁瑣,所以才萌生了讓使用起來更方便,并且不依賴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來生成,不依賴外部網絡
/// <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位數字驗證碼
綁定后再次登錄
六.如何使用
所有源代碼請參照我的GitHub?https://github.com/yuefengkai/Brook.Totp
EF Core In Memory Database所有的數據只存在內存中
Cache in-memory
dotNET Core Authentication
下方只展示部分代碼
1.新建netCoreMVC項目添加Nuget包Brook.Totp
2.注入方式
Startup注入
Controller使用
七.寫在最后
以上所有源代碼已開源在?https://github.com/yuefengkai/Brook.Totp
作者:Brook
總結
以上是生活随笔為你收集整理的ASP.NET Core 双因素验证2FA 实战经验分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员过关斩将--cookie和sess
- 下一篇: 结合“性能监视器” 排查、处理性能瓶颈导