[C#] 串接Google Two-factor Authentication

2018-01-02

最近專案要用到就簡單筆記一下,試著串接一下,因為使用 網路上的 Library 覺得非常簡單,就筆記一下避免自己忘記
如果不知道什麼是 Google 二次驗證 可以參考這個網址 : https://www.google.com/intl/zh-TW/landing/2step/

image

1. 開啟專案 , 然後去 Nuget 下載 一套叫做 Google.Authenticator 的套件

Image 531

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 + "' />";

結果:
image

4. QR Code 內容 :


 ltlQRCodeContent.Text = "otpauth://totp/"+"[email protected]"+"?secret="+ setupInfo.ManualEntryKey+ "&issuer="+ "DONMA BLOG";

5. 手機端測試:
26540075_1748904328518296_368364293_o

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


當麻許的超技八 2014 | Donma Hsu Design.