Users Api
Zero-Knowledge Authentication for Every User
ASP.NET
Arch is built on the ASP.NET platform. To get started with the Users Api, add its NuGet package to your program, register it with the service collection, and work with its client.
NuGet Setup
Add NuGet package TriunniaLabs.Arch.Api.Users.Client to your project. If you would like to use a relay and have your Blazor client contact the Users Api directly via your server, add package TriunniaLabs.Arch.Relay.Users.Client to your Blazor client and TriunniaLabs.Arch.Relay.Users.Server to your server.

Note that we use our own NuGet package feed, which you must add as a package source in your environment.
Service Setup
In the main Service Composition section of your program startup, make the call to AddTriunniaLabsUsersApi() to add the Users Api. This reads the UsersApi configuration section, registers the Users Api client with its resilience policies, and provides a callback for its types to be registered with the message formatter.
builder.Services.AddTriunniaLabsUsersApi(builder.Configuration, builder.Services.AddStandardMessagePackFormatters);
See: Program.cs
Accessing the Users Api
Access the Users Api by injecting the IUsersApiClient.

See UsersApiSampleController.cs for examples of how to use its functions. Note that all parameters passed to these functions must be Protected Types (Protected<T>). For Blazor and browser-based clients, see UsersApiRelaySampleController.cs for the relay client pattern using IUsersApiRelayClient.
Aspire
If using Aspire, add this extension method to your solution to install the Users Api in the Aspire solution. Set the correct version number, fill in the environment variables, ensure the bind mount path is accurate, and make any other changes as required.
public static void AddUsersApi(this IDistributedApplicationBuilder builder, IResourceBuilder<SqlServerServerResource> sqlServer) { var usersApiDb = sqlServer.AddDatabase("UsersApiDb"); builder.AddContainer("UsersApi", "gitea.triunnialabs.com/triunnialabs/arch-users-api", "0.2.45") .WithEndpoint(50005, 8080, isProxied: false, name: "http") .WithEndpoint("http", e => e.TargetHost = "0.0.0.0") // Obtain the values for these fields from the Control Panel .WithEnvironment("Microservice__Name", "") .WithEnvironment("Microservice__EnvelopePassword", "") .WithEnvironment("Microservice__EnableDiagnostics", "true") // Set to false in production deployments .WithEnvironment("Microservice__Application__Url", "") .WithEnvironment("Microservice__Application__ApplicationId", "") .WithEnvironment("Microservice__Application__ApiKey", "") .WithEnvironment("Microservice__Application__EnvelopePassword", "") .WithEnvironment("Microservice__ProtectedMemory__HmacSha512HashKey", "") .WithEnvironment("Microservice__ProtectedMemory__AesEncryptionPassword", "") .WithEnvironment("Microservice__ProtectedMemory__AesEncryptionSalt", "") .WithEnvironment("Microservice__ProtectedMemory__AesEncryptionIterations", "") .WithEnvironment("SqlServer__ConnectionString", "") .WithEnvironment("SqlServer__ReadOnlyConnectionString", "") .WithEnvironment("KeysApi__Url", "") .WithEnvironment("KeysApi__ApplicationId", "") .WithEnvironment("KeysApi__ApiKey", "") .WithEnvironment("KeysApi__EnvelopePassword", "") .WithEnvironment("TokensApi__Url", "") .WithEnvironment("TokensApi__ApplicationId", "") .WithEnvironment("TokensApi__ApiKey", "") .WithEnvironment("TokensApi__EnvelopePassword", "") .WithEnvironment("EmailApi__Url", "") .WithEnvironment("EmailApi__ApplicationId", "") .WithEnvironment("EmailApi__ApiKey", "") .WithEnvironment("EmailApi__EnvelopePassword", "") .WithEnvironment("UsersApi__AuthenticationScheme", "") // Api will write log and other files to this relative source folder .WithBindMount("..\\..\\..\\data\\UsersApi", "/opt/triunnialabs/arch/users-api") .WithReference(usersApiDb) .WaitFor(usersApiDb); }
See: UsersApiSetup.cs
Tech Sovereignty
Arch
Company
About Contact