Memberships Integration Guide (.NET)
If you want the shortest working path first, start with Verified .NET Quickstart. This guide is the fuller host setup.
Step 1: Install the packages you need
Core package:
dotnet add package PrimusSaaS.Memberships
ASP.NET Core endpoints:
dotnet add package PrimusSaaS.Memberships.AspNetCore
Durable storage:
dotnet add package PrimusSaaS.Memberships.EFCore
Development and tests only:
dotnet add package PrimusSaaS.Memberships.InMemory
Step 2: Register core and endpoint services
using PrimusSaaS.Memberships.AspNetCore.DependencyInjection;
using PrimusSaaS.Memberships.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(/* your scheme */);
builder.Services.AddAuthorization();
builder.Services.AddPrimusMemberships(options =>
{
options.InvitationTtl = TimeSpan.FromDays(7);
options.RequireMatchingEmailOnAcceptance = true;
options.AllowBootstrapWithoutInvite = true;
options.PersistActiveTenantSelection = true;
});
builder.Services.AddPrimusMembershipsAspNetCore(options =>
{
options.SelfPolicyName = "SelfPolicy";
options.AdminPolicyName = "TenantAdmin";
});
Step 3: Choose storage
For development or tests:
builder.Services.AddPrimusMembershipsInMemory();
For durable EF Core storage:
using PrimusSaaS.Memberships.EFCore.DependencyInjection;
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddPrimusMembershipsEfCore<AppDbContext>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.AddPrimusMemberships();
}
Step 4: Map endpoints
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapPrimusMembershipEndpoints();
app.Run();
By default, Memberships requires authentication on both self and admin routes. If SelfPolicyName or AdminPolicyName is set, those policies are applied on top of the authenticated-user requirement.
Step 5: Validate your first working flow
- Create an invitation for a tenant.
- Accept the invitation with the protected token.
- Read
/primus/memberships/me/tenants. - Read or set
/primus/memberships/me/active-tenant.
Step 6: Add bridges only when needed
- Add
PrimusSaaS.Memberships.Brokerwhen membership lifecycle events should revoke Identity Broker sessions or refresh tokens. - Add
PrimusSaaS.Memberships.Rbacwhen membership lifecycle events should provision RBAC assignments through explicit role mappings. - Use the In-Memory or EF Core bridge adapters when Multi-Tenancy or Identity Broker needs membership-backed data.
Use the Composition Guide for the exact bridge expectations and boundaries.