TapInAuth.AspNetCore 0.5.1

dotnet add package TapInAuth.AspNetCore --version 0.5.1
                    
NuGet\Install-Package TapInAuth.AspNetCore -Version 0.5.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TapInAuth.AspNetCore" Version="0.5.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TapInAuth.AspNetCore" Version="0.5.1" />
                    
Directory.Packages.props
<PackageReference Include="TapInAuth.AspNetCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TapInAuth.AspNetCore --version 0.5.1
                    
#r "nuget: TapInAuth.AspNetCore, 0.5.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TapInAuth.AspNetCore@0.5.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TapInAuth.AspNetCore&version=0.5.1
                    
Install as a Cake Addin
#tool nuget:?package=TapInAuth.AspNetCore&version=0.5.1
                    
Install as a Cake Tool

TapInAuth

Tap to sign in. Drop-in passwordless authentication for ASP.NET Core and Blazor — passkeys, magic links, email OTP, and recovery codes — with an executive-grade UI that themes to your brand and a multi-tenant store baked in from day one.

CI NuGet License: MIT .NET 10

What you get

Method Status Package
🔑 Passkeys (WebAuthn / FIDO2) ✅ shipping TapInAuth.Core (wraps Fido2.AspNet)
📧 Magic link (email) ✅ shipping TapInAuth.Core
🔢 Email OTP (6-digit code) ✅ shipping TapInAuth.Core
🔄 Recovery codes (single-use) ✅ shipping TapInAuth.Core
📱 SMS OTP sign-in (phone as secondary identifier) ✅ shipping TapInAuth.Core + TapInAuth.Sms.Twilio
🤖 Bot-defense widgets (Turnstile / hCaptcha) ✅ shipping TapInAuth.Risk.Turnstile, TapInAuth.Risk.HCaptcha

Plus: a Razor Pages UI and a Razor Components (Blazor Server) UI you can ship as-is or restyle with CSS variables, a tenant-aware EF Core store, an ASP.NET Core Identity adapter for existing apps, a built-in admin dashboard with audit feed, five email providers (SMTP, SendGrid, Postmark, Amazon SES, MessageBird) behind a single IEmailSender contract, and an MIT license.

5-line quickstart

// Program.cs
builder.Services
    .AddTapInAuth(o =>
    {
        o.Logo.Path    = "wwwroot/img/your-logo.svg";
        o.Theme.Accent = "#2563EB";
        o.Methods      = TapInAuthMethod.Passkey
                       | TapInAuthMethod.MagicLink
                       | TapInAuthMethod.EmailOtp
                       | TapInAuthMethod.RecoveryCode;
    })
    .AddEfCoreStore<AppDbContext>()
    .AddSmtpEmail(builder.Configuration.GetSection("Smtp"));

app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();          // surfaces TapInAuth.UI's sign-in / OTP / passkeys / recovery pages
app.MapTapInAuth();           // mounts /auth/* endpoints

That's the entire host-app surface. Sign-in page, magic-link landing page, OTP entry, passkey ceremony, recovery flow, admin dashboard — all in the library, all themed to your --tap-accent.

Already on ASP.NET Core Identity?

Swap one builder call:

builder.Services.AddTapInAuth(...)
    .AddEfCoreStore<AppDbContext>()       // still hosts magic-link, OTP, recovery, passkey tables
    .AddIdentityAdapter<IdentityUser>()   // user table → Identity's AspNetUsers
    .AddSmtpEmail(...);

No second user table. UserManager<IdentityUser> runs the user side; TapInAuth runs everything else. See samples/Identity.Sample for the end-to-end demo.

Multi-tenant SaaS?

Tenancy is built in from day one — every store call is tenant-scoped. Add a resolver, point it at your tenant catalog, optionally override per-tenant logo / accent / WebAuthn RP id:

builder.Services.AddTapInAuth(...)
    .AddEfCoreStore<AppDbContext>()
    .AddTenantResolver<MySubdomainTenantResolver>()
    .AddSmtpEmail(...);

See samples/SaaS.MultiTenant for the three-tenant demo with per-tenant logos, brand colors, and credential isolation.

Why TapInAuth?

TapInAuth fido2-net-lib ASP.NET Core Identity passkeys Bitwarden Passwordless.dev
Passkeys (WebAuthn) ✅ (protocol only) ✅ (Blazor template only) ✅ (SaaS, $3/user/mo)
Magic link
Email/SMS OTP
Recovery codes
Built-in UI, themable template only hosted widget
Admin dashboard + audit log
Multi-tenant from day one N/A
Identity adapter N/A N/A N/A
OSS, self-hosted, no SaaS open-core

Documentation

Getting started Add TapInAuth to a fresh or existing ASP.NET Core app
Concepts: multi-tenancy Tenant resolution, per-tenant branding, isolation guarantees
Concepts: cookie handoff How TapInAuth cooperates with AddAuthentication().AddCookie()
How-to: ASP.NET Core Identity adapter Plug into an existing IdentityUser setup
How-to: passkeys WebAuthn config, RP id, conditional UI
How-to: recovery codes Generation, redemption, UX patterns
How-to: admin dashboard Granting the admin role, audit feed
How-to: theming Design tokens, logo handling, dark/light mode
How-to: SMS sign-in Phone as secondary identifier, account-page management
Reference: options Every TapInAuthOptions knob
Reference: endpoints Every HTTP endpoint mounted by MapTapInAuth()
Reference: email providers SMTP / SendGrid / SES / Postmark / MessageBird
Deploy Azure · AWS · Docker · Kubernetes · IIS

Repository layout

src/
  TapInAuth.Abstractions/               Interfaces, DTOs, options
  TapInAuth.Core/                       Auth engine (magic link, OTP, SMS OTP, passkeys, recovery, hashing, rate limit, audit)
  TapInAuth.AspNetCore/                 DI extensions, endpoint mapping, cookie handoff, admin policy
  TapInAuth.Identity/                   ASP.NET Core Identity adapter
  TapInAuth.Store.EntityFrameworkCore/  EF Core store (tenant-aware) + EF audit sink
  TapInAuth.Email.Smtp/                 MailKit-based IEmailSender
  TapInAuth.Email.SendGrid/             SendGrid IEmailSender
  TapInAuth.Email.Ses/                  Amazon SES (v2) IEmailSender
  TapInAuth.Email.Postmark/             Postmark IEmailSender
  TapInAuth.Email.MessageBird/          MessageBird (Bird) IEmailSender
  TapInAuth.Sms.Twilio/                 Twilio ISmsSender
  TapInAuth.Risk.Turnstile/             Cloudflare Turnstile bot-defense
  TapInAuth.Risk.HCaptcha/              hCaptcha bot-defense
  TapInAuth.UI/                         Razor Pages UI (RCL) — sign-in, OTP, passkeys, recovery, account, admin
  TapInAuth.UI.Blazor/                  Razor Components UI (Blazor Server / interactive)

samples/
  Mvc.Quickstart/                       Single-tenant MVC app with all methods
  Identity.Sample/                      ASP.NET Core Identity + TapInAuth coexistence
  SaaS.MultiTenant/                     SaaS demo: subdomain tenants, per-tenant logo + theme
  BlazorServer.Quickstart/              Blazor Server app using TapInAuth.UI.Blazor

tests/
  TapInAuth.Abstractions.Tests/
  TapInAuth.Core.Tests/
  TapInAuth.AspNetCore.Tests/

Building locally

Prerequisites: .NET SDK 10.0.300+ (global.json enforces).

git clone https://github.com/tapinauth/tapinauth.git
cd tapinauth
dotnet restore
dotnet build -c Release
dotnet test  -c Release
dotnet run   --project samples/Mvc.Quickstart

The samples include Hermex — an in-process dev SMTP server with a browser inbox at /hermex — so you can sign in via magic-link or OTP without configuring real SMTP.

Contributing

See CONTRIBUTING.md. All commits must be signed off (DCO — git commit -s).

Security

See SECURITY.md for the threat model and how to report vulnerabilities.

License

MIT — see LICENSE. Trademark "TapInAuth" is held by Suresh Subramanian; the open-source license does not grant a trademark license.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (12)

Showing the top 5 NuGet packages that depend on TapInAuth.AspNetCore:

Package Downloads
TapInAuth.UI

Razor Pages UI for TapInAuth. Ships executive-grade sign-in, magic-link, and OTP screens with full design tokens and auto light/dark mode.

TapInAuth.Email.SendGrid

SendGrid provider for TapInAuth's IEmailSender. Pair with TapInAuth.AspNetCore.

TapInAuth.Identity

ASP.NET Core Identity adapter for TapInAuth. Plug TapInAuth's passwordless flows on top of an existing IdentityUser / UserManager-based application — no second user table required.

TapInAuth.Email.Postmark

Postmark provider for TapInAuth's IEmailSender. Pair with TapInAuth.AspNetCore.

TapInAuth.Email.Smtp

MailKit-based SMTP provider for TapInAuth's IEmailSender. Pair with TapInAuth.AspNetCore.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.5.1 253 6/1/2026