This guide shows how to register multiple MonoCloud authentication schemes in a single .NET API using the MonoCloud API Authentication .NET SDK.
Each call to AddMonoCloudAuthentication registers an independent authentication scheme with its own configuration. Use multiple schemes when:
This guide assumes you've completed the installation guide.
You should already have:
MonoCloud.Authentication.Api SDK installedMonoCloud section configured in appsettings.jsonGive each scheme a unique name — the first scheme uses the default scheme name, and additional schemes are named explicitly. To select which scheme validates an endpoint, define a policy per scheme with AddAuthenticationSchemes and apply it with RequireAuthorization. On controllers, you can alternatively use [Authorize(AuthenticationSchemes = ...)].
using System.Security.Claims;
using MonoCloud.Authentication.Api;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddAuthentication(MonoCloudAuthenticationDefaults.AuthenticationScheme)
.AddMonoCloudAuthentication(options =>
{
options.TenantDomain = builder.Configuration["MonoCloud:PublicApi:TenantDomain"];
options.Audience = builder.Configuration["MonoCloud:PublicApi:Audience"];
})
.AddMonoCloudAuthentication("MonoCloud.Admin", options =>
{
options.TenantDomain = builder.Configuration["MonoCloud:AdminApi:TenantDomain"];
options.Audience = builder.Configuration["MonoCloud:AdminApi:Audience"];
});
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("PublicApi", policy =>
{
policy.AddAuthenticationSchemes(MonoCloudAuthenticationDefaults.AuthenticationScheme);
policy.RequireAuthenticatedUser();
});
options.AddPolicy("AdminApi", policy =>
{
policy.AddAuthenticationSchemes("MonoCloud.Admin");
policy.RequireAuthenticatedUser();
});
});
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.MapGet("/api/data", (ClaimsPrincipal user) => new
{
message = "Public API data",
scheme = user.Identity?.AuthenticationType,
})
.RequireAuthorization("PublicApi");
app.MapGet("/api/admin", (ClaimsPrincipal user) => new
{
message = "Admin API data",
scheme = user.Identity?.AuthenticationType,
})
.RequireAuthorization("AdminApi");
app.Run();
How it works:
TenantDomain, Audience, keys, and cacheAddAuthenticationSchemes decides which scheme validates the incoming tokenuser.Identity?.AuthenticationType returns the name of the scheme that authenticated the request