44 lines
2.4 KiB
Markdown
44 lines
2.4 KiB
Markdown
# GoogleAuthenticator
|
|
Simple, easy to use server-side two-factor authentication library for .NET that works with Google Authenticator
|
|
|
|
[![Build Status](https://dev.azure.com/brandon-potter/GoogleAuthenticator/_apis/build/status/BrandonPotter.GoogleAuthenticator?branchName=master)](https://dev.azure.com/brandon-potter/GoogleAuthenticator/_build/latest?definitionId=1&branchName=master)
|
|
[![NuGet Status](https://buildstats.info/nuget/GoogleAuthenticator)](https://www.nuget.org/packages/GoogleAuthenticator/)
|
|
|
|
[`Install-Package GoogleAuthenticator`](https://www.nuget.org/packages/GoogleAuthenticator)
|
|
|
|
## 1.x Usage
|
|
See blog post for usage instructions *(1.x only)*:
|
|
|
|
https://csharprookie.wordpress.com/2015/03/17/implementing-free-two-factor-authentication-in-net-using-google-authenticator/
|
|
|
|
## 2.x Usage
|
|
|
|
*Additional examples at [Google.Authenticator.WinTest](https://github.com/BrandonPotter/GoogleAuthenticator/tree/master/Google.Authenticator.WinTest) and [Google.Authenticator.WebSample](https://github.com/BrandonPotter/GoogleAuthenticator/tree/master/Google.Authenticator.WebSample)*
|
|
|
|
```csharp
|
|
using Google.Authenticator;
|
|
|
|
string key = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10);
|
|
|
|
TwoFactorAuthenticator tfa = new TwoFactorAuthenticator();
|
|
SetupCode setupInfo = tfa.GenerateSetupCode("Test Two Factor", "user@example.com", key, false, 3);
|
|
|
|
string qrCodeImageUrl = setupInfo.QrCodeSetupImageUrl;
|
|
string manualEntrySetupCode = setupInfo.ManualEntryKey;
|
|
|
|
imgQrCode.ImageUrl = qrCodeImageUrl;
|
|
lblManualSetupCode.Text = manualEntrySetupCode;
|
|
|
|
// verify
|
|
TwoFactorAuthenticator tfa = new TwoFactorAuthenticator();
|
|
bool result = tfa.ValidateTwoFactorPIN(key, txtCode.Text)
|
|
```
|
|
|
|
## Common Pitfalls
|
|
|
|
* Old documentation indicated specifying width and height for the QR code, but changes in QR generation now uses pixels per module (QR "pixel") so using a value too high will result in a huge image that can overrun memory allocations
|
|
* Don't use the secret key and `ManualEntryKey` interchangeably. `ManualEntryKey` is used to enter into the authenticator app when scanning a QR code is impossible and is derived from the secret key ([discussion example](https://github.com/BrandonPotter/GoogleAuthenticator/issues/54))
|
|
|
|
# Notes
|
|
On linux, you need to ensure `libgdiplus` is installed if you want to generate QR Codes. See [https://github.com/codebude/QRCoder/issues/227](https://github.com/codebude/QRCoder/issues/227).
|