Requirements
- .NET 6.0 or later
BouncyCastle.Cryptography(pulled in transitively with the AuthForge package)
Installation
Add the AuthForge package from NuGet:Prefer a source-only layout? Copy
AuthForgeClient.cs from GitHub and reference BouncyCastle.Cryptography explicitly. The NuGet package is recommended for most apps.Quick start
Constructor parameters
ttlSeconds (grace period)
Requested session token lifetime in seconds for /auth/validate. This is the grace period: how long the app keeps running on the signed session without contacting AuthForge. Pass null (or omit) to accept the server default of 24 hours. The server clamps to [3600, 604800] (1 hour to 7 days). The requested TTL is preserved across heartbeat refreshes, and apps relying on the grace period alone can extend their window up to 7 days.
Billing
- Each successful
Login()orValidateLicense()costs 1 credit (one/auth/validatedebit). - The grace period is free: local session re-verification makes no network calls and consumes no credits.
- Online check-ins (if enabled) cost 1 credit per 10 successful heartbeats (billed on every 10th call).
- With online check-ins, revocations take effect on the next check-in regardless of interval; without them, at session expiry.
Login
true if authentication succeeded, false otherwise. On success, the SDK starts a background thread that re-verifies the signed session locally during the grace period (and sends online check-ins if onlineHeartbeat: true).
Validate license (no session)
/auth/validate request and verification as Login, without updating the client’s session fields or starting the background thread.
Failure callback
If authentication fails, an online check-in fails, or the session expires, the SDK calls yourOnFailure callback. If no callback is set (or the callback throws), the SDK calls Environment.Exit(1).
Reading variables
After a successful login, app variables and license variables are available:Grace period and online check-ins
By default, the app runs through the grace period after activation: the SDK re-verifies the signed session locally, makes no network calls, and stops when the session expires. Opt in to online check-ins for fast revocation and concurrent-use detection:Offline license files (.authforge)
For machines that never connect to the internet, the operator mints a signed offline license file in the dashboard or Developer API (1 credit). The SDK verifies it locally with your public key and the machine HWID; no network, no check-ins, and online Login() is untouched. Pass appSecret: "" so the air-gapped binary does not contain the App Secret.
onFailure("offline_login_failed", new ArgumentException(code)) and return false (never Environment.Exit). Codes, in check order: bad_armor, bad_signature, unsupported_version, malformed_payload, wrong_app, expired, hwid_mismatch. client.VerifyLicenseFile(pathOrText) and the static AuthForgeClient.VerifyLicenseFile(text, appId, publicKeys, hwid) run the same checks without touching state. Issued files cannot be revoked remotely; they stay valid until their own expiry. CreateActivationRequest() produces the .authforge-request the operator uploads; hostname is omitted unless IncludeMachineName is set. See Activation requests.
Migrating from heartbeatMode
The legacy string heartbeatMode constructor is marked obsolete but still works:
heartbeatMode: "LOCAL": remove the argument; the grace period is now the default.heartbeatMode: "SERVER": useonlineHeartbeat: trueinstead.