分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
Google Authenticator 是Google的OTP驗證器,可以用手機於Google Play 商店下載
如果有加入金鑰約每隔30秒會產生一次新的OTP驗證碼
加入金鑰的方式可以用 “手動輸入” 或 “掃描QR Code”
說明出處: Wiki
重點: 開發者的網站需要提供用戶一組金鑰,此金鑰開發者也必須記錄,未來用戶登入時驗證兩邊的驗證碼是否一致
開啟Visual Studio 建立一個新專案(這邊使用Windows Form作為範例) -> 加入參考
安裝
using Google.Authenticator;
其中TwoFactorAuthenticator Class 是Google SDK 的物件
1. Account 是自己設定,會影響產生的手動金鑰 ManualEntryKey 與 QR Code
2. Secret Key 是自己設定,會影響產生的手動金鑰 ManualEntryKey 與 QR Code
3. ManualEntryKey 由上面兩個參數產生
/// <summary>
/// 產生QR Code 與 加密金鑰
/// </summary>
public void CreateSecretKeyAndQrCode()
{
TwoFactorAuthenticator tfA = new TwoFactorAuthenticator();
var setupCode = tfA.GenerateSetupCode(textBox_account.Text, textBox_account.Text, textBox_SecretKey.Text, false, 3);
//1. QRCode圖片從記憶體轉到畫面上
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(setupCode.QrCodeSetupImageUrl.Replace("data:image/png;base64,", ""))))
pictureBox_QRCode.Image = Image.FromStream(ms);
//2. 產生的金鑰與資訊
this.textBox_Message.Text =
"結合密鑰的文字 Account: " + textBox_account.Text + System.Environment.NewLine +
"自已加密的密鑰 Secret Key: " + textBox_SecretKey.Text + System.Environment.NewLine +
"手動輸入的密鑰 Encoded Key: " + setupCode.ManualEntryKey;
}
產生QR Code與加密金鑰的代碼畫面
/// <summary>
/// 產生Secret當前的驗證碼
/// </summary>
public List<string> GeneratorCurrentCode()
{
var resultArray = new TwoFactorAuthenticator().GetCurrentPINs(textBox_SecretKey.Text);
var resultList = new List<string>(resultArray);
return resultList;
}
以下為產生驗證碼的代碼的執行結果
/// <summary>
/// 驗證碼是否正確
/// </summary>
/// <returns></returns>
public string ValidateGoogleAuthCode()
{
var isRight = false;
TwoFactorAuthenticator tfA = new TwoFactorAuthenticator();
isRight = tfA.ValidateTwoFactorPIN(textBox_SecretKey.Text, textBox_ValidateCode.Text);
return isRight ? "驗證正確" : "錯誤";
}
以下為產生驗證碼的代碼的執行結果
可以發現SecretKey相同時產生的金鑰會一致,而且每隔30秒會替換新的驗證碼