CodeLogic.TwoFactorAuth
4.6.69-preview
See the version list below for details.
dotnet add package CodeLogic.TwoFactorAuth --version 4.6.69-preview
NuGet\Install-Package CodeLogic.TwoFactorAuth -Version 4.6.69-preview
<PackageReference Include="CodeLogic.TwoFactorAuth" Version="4.6.69-preview" />
<PackageVersion Include="CodeLogic.TwoFactorAuth" Version="4.6.69-preview" />
<PackageReference Include="CodeLogic.TwoFactorAuth" />
paket add CodeLogic.TwoFactorAuth --version 4.6.69-preview
#r "nuget: CodeLogic.TwoFactorAuth, 4.6.69-preview"
#:package CodeLogic.TwoFactorAuth@4.6.69-preview
#addin nuget:?package=CodeLogic.TwoFactorAuth&version=4.6.69-preview&prerelease
#tool nuget:?package=CodeLogic.TwoFactorAuth&version=4.6.69-preview&prerelease
CodeLogic.TwoFactorAuth
TOTP two-factor authentication with QR-code generation for CodeLogic 4 — compatible with Google Authenticator, Authy, and 1Password.
Implements RFC 6238 time-based one-time passwords over Otp.NET and renders provisioning QR codes with QRCoder. Two services are exposed: an authenticator (generate/validate codes) and a QR-code generator.
Install
dotnet add package CodeLogic.TwoFactorAuth
Quick start
await Libraries.LoadAsync<TwoFactorAuthLibrary>();
await CodeLogic.ConfigureAsync();
await CodeLogic.StartAsync();
var tfa = Libraries.Get<TwoFactorAuthLibrary>();
// 1. Enrol: create a key bound to issuer + user (fresh Base32 secret)
TwoFactorKey key = tfa.GenerateNewKey("MyApp", "user@example.com");
// persist key.SecretKey alongside the user record
// 2. Show a QR code for the authenticator app
Result<string> qr = tfa.GenerateQrCodeDataUri(key); // data:image/png;base64,...
if (qr.IsSuccess) { /* <img src="qr.Value"> */ }
// 3. Verify a code the user typed
TotpValidationResult check = tfa.ValidateTotp("123456", key.SecretKey);
if (check.IsValid) { /* grant access */ }
Features
- Secret generation — cryptographically random Base32 TOTP secrets (
GenerateSecretKey). - Provisioning —
GenerateNewKey(issuer, user)returns aTwoFactorKeywith a standardotpauth://ProvisioningUri. - Generate & validate —
GenerateTotpCode/ValidateTotpwith a configurable time step and drift window; validation returns aTotpValidationResultincluding the matched window offset. - Lifetime helpers —
GetSecondsUntilExpiry()andGetCurrentTimeWindow(). - QR rendering — PNG / BMP bytes, Base64, data URI, and save-to-file, with configurable module size and error-correction level.
- Events —
SecretKeyGeneratedEventandTotpValidatedEventon the CodeLogic event bus.
Configuration
Auto-generated on first run as config.twofactorauth.json:
{
"Enabled": true,
"TimeStepSeconds": 30,
"WindowSize": 1,
"QrCodeModuleSize": 20,
"ErrorCorrectionLevel": "Q"
}
| Setting | Default | Description |
|---|---|---|
Enabled |
true |
Master switch; when false the services aren't created and health reports disabled. |
TimeStepSeconds |
30 |
TOTP time step (1–300); must match the authenticator app. |
WindowSize |
1 |
Steps before/after the current window accepted (0–10); 1 ≈ ±30s drift. |
QrCodeModuleSize |
20 |
Pixel size of each QR module (1–100). |
ErrorCorrectionLevel |
Q |
L (~7%), M (~15%), Q (~25%), H (~30%). |
Documentation
Full guide: CL.TwoFactorAuth documentation
Requirements
- CodeLogic 4 · .NET 10
- Otp.NET 1.x · QRCoder 1.x
License
MIT — see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.6.72 | 177 | 6/20/2026 |
| 4.6.69-preview | 35 | 6/20/2026 |
| 4.5.2 | 105 | 5/24/2026 |
| 4.5.2-preview.68 | 56 | 6/20/2026 |
| 4.5.1 | 156 | 5/24/2026 |
| 4.5.1-preview.56 | 97 | 5/24/2026 |
| 4.4.2-preview.53 | 56 | 5/24/2026 |
| 4.4.1 | 101 | 5/24/2026 |
| 4.0.5 | 106 | 5/15/2026 |
| 4.0.4 | 111 | 5/9/2026 |
| 4.0.3 | 109 | 5/9/2026 |
| 3.3.1 | 624 | 4/18/2026 |
| 3.3.0 | 114 | 4/18/2026 |
| 3.2.11 | 125 | 4/18/2026 |
| 3.2.10 | 113 | 4/18/2026 |
| 3.2.9 | 108 | 4/18/2026 |
| 3.2.8 | 107 | 4/18/2026 |
| 3.2.7 | 107 | 4/18/2026 |
| 3.2.6 | 107 | 4/18/2026 |
| 3.2.5 | 114 | 4/18/2026 |
# CL.TwoFactorAuth — Changelog
All notable changes to **CodeLogic.TwoFactorAuth** are documented here. Versions follow
[Semantic Versioning](https://semver.org/).
## 2026-06-20
### Documentation
- Full rewrite of the README and the `docs/libs/twofactorauth.md` guide to the
shared house style: a concise, NuGet-rendered README (badges, tagline, install,
quick start, features, configuration table + JSON, requirements) and a single
deep documentation page covering the enrolment flow, sign-in validation, the
`Authenticator` and `QrCode` services, the `TwoFactorKey` /
`TotpValidationResult` shapes, configuration, events, and the health check.
No API changes.
## [4.5.2] — 2026-06-20
### Documentation
- Corrected the README and the security guide to match the shipping API. The
previous docs referenced members and config keys that do not exist
(`GenerateSecret`, `Validate(secret, token)`, `GetOtpAuthUri`, backup-code
helpers, and the `Issuer`/`SecretKeyLength`/`TokenValiditySeconds`/
`AllowedClockSkewSeconds`/`QrCodeSize` settings).
- Documented the real configuration keys: `Enabled`, `TimeStepSeconds`,
`WindowSize`, `QrCodeModuleSize`, and `ErrorCorrectionLevel`
(`L`/`M`/`Q`/`H`).
- Documented the `Authenticator` and `QrCode` services and their full surface:
`GenerateSecretKey`, `GenerateNewKey`, `GenerateTotpCode`, `ValidateTotp`
(incl. the optional `userId` argument and the `TotpValidationResult` shape),
`GetSecondsUntilExpiry`, `GetCurrentTimeWindow`, and the QR outputs
`GenerateQrCodePng` / `GenerateQrCodeBmp` / `GenerateQrCodeBase64` /
`GenerateQrCodeDataUri` / `SaveQrCodeToFile`.
- Documented the `TwoFactorKey.ProvisioningUri` (`otpauth://`) property, the
`SecretKeyGeneratedEvent` / `TotpValidatedEvent` bus events, and the actual
health-check behavior (live TOTP key generation).
## [4.5.0] — 2026-05-24
### Changed
- **Unified versioning.** All CodeLogic.Libs now share a single version line
controlled by `version.txt` in the repo root. This is a version alignment
release — no functional changes to this library.
## [4.0.4] — 2026-04-16
### Changed
- README + manifest refresh for the v4 baseline. No functional changes vs 4.0.3.
- `LibraryManifest.Version` now reads from assembly metadata.
## [4.0.2] — 2026-04-09
### Changed
- Annotated 2FA configuration with `[ConfigField]` for the admin UI surface.
- Aligned with the v4 baseline across all libraries.
## [4.0.0] — 2026-04-09
Major rewrite. Republished as v4.0.0 to reset the version line under the
unified v4 baseline. TOTP-based 2FA with QR code generation, backup codes,
and a CodeLogic-native flow for Google Authenticator / Authy / 1Password.
### Notes
- Earlier history is retained in the
[git log](https://github.com/Media2A/CodeLogic.Libs/commits/main/CL.TwoFactorAuth).