[C#] 串接Google Two-factor Authentication
2018-01-02
最近專案要用到就簡單筆記一下,試著串接一下,因為使用 網路上的 Library 覺得非常簡單,就筆記一下避免自己忘記
如果不知道什麼是 Google 二次驗證 可以參考這個網址 : https://www.google.com/intl/zh-TW/landing/2step/
1. 開啟專案 , 然後去 Nuget 下載 一套叫做 Google.Authenticator 的套件
nuget 位置: https://www.nuget.org/packages/GoogleAuthenticator
2. 首先,你得產生一組給每一個客戶的 AccountSecretKey 並且保密這個Key 這邊範例我是隨便取一個GUID 並且只取10碼來當作 sample ,避免每次更新我用 static 暫時保存著
private static string AccountSecretKey { get; set; } protected void Page_Load(object sender, EventArgs e) { //建立一把用戶的私鑰 if (string.IsNullOrEmpty(AccountSecretKey)) { AccountSecretKey = Guid.NewGuid().ToString("N").Substring(0, 10); } ltlAccountSecretKey.Text = AccountSecretKey;
3. 產生 QR Code , 在產生 QR Code 前,你需要得到該用戶的 ManualEntryKey 只要透過 該library TwoFactorAuthenticator.GenerateSetupCode 即可
//產生QR Code. var tfa = new TwoFactorAuthenticator(); var setupInfo = tfa.GenerateSetupCode("DONMA BLOG", "[email protected]", AccountSecretKey, 300, 300); //用內建的API 產生 ltlQRCode.Text = "<img src='" + setupInfo.QrCodeSetupImageUrl + "' />";
結果:
4. QR Code 內容 :
ltlQRCodeContent.Text = "otpauth://totp/"+"[email protected]"+"?secret="+ setupInfo.ManualEntryKey+ "&issuer="+ "DONMA BLOG";
5. 手機端測試:
6. 驗證用戶輸入:
protected void btnValid_Click(object sender, EventArgs e) { TwoFactorAuthenticator tfa = new TwoFactorAuthenticator(); //第一個參數是你當初產生QRcode 所產生的Secret code //第二個參數是用戶輸入的純數字Code var result = tfa.ValidateTwoFactorPIN(AccountSecretKey, txtUserType.Text); ltlResult.Text = result ? "SUCCESS!!" : "FAIL!!"; }
很簡單吧 :)
sample code : https://github.com/donma/Google.Authenticator.TwoFactor.Sample