feat(auth): add Redis authorization caching
This commit is contained in:
@@ -199,8 +199,8 @@ internal static class AuthenticationExtensions
|
||||
}
|
||||
}
|
||||
|
||||
var sessionStore = context.HttpContext.RequestServices.GetRequiredService<IAuthSessionStore>();
|
||||
var session = await sessionStore.ValidateAccessSessionAsync(
|
||||
var accessValidator = context.HttpContext.RequestServices.GetRequiredService<IRequestAccessValidator>();
|
||||
var session = await accessValidator.ValidateAsync(
|
||||
sessionId,
|
||||
userId,
|
||||
realm.Value,
|
||||
|
||||
@@ -39,6 +39,12 @@ public static class DependencyInjection
|
||||
options => !builder.Environment.IsProduction() || !string.IsNullOrWhiteSpace(options.ConnectionString),
|
||||
"Redis is required in Production.")
|
||||
.ValidateOnStart();
|
||||
builder.Services.AddOptions<AuthorizationCacheOptions>()
|
||||
.Bind(builder.Configuration.GetSection(AuthorizationCacheOptions.SectionName))
|
||||
.Validate(options => options.LocalSnapshotSeconds > 0 && options.DistributedStateSeconds > 0 &&
|
||||
options.DistributedSnapshotSeconds > 0 && options.JitterPercent is >= 0 and <= 50,
|
||||
"Authorization cache durations must be positive and jitter must be between 0 and 50 percent.")
|
||||
.ValidateOnStart();
|
||||
if (!string.IsNullOrWhiteSpace(redisConnectionString))
|
||||
{
|
||||
builder.Services.AddRedisSecurity(redisConnectionString, builder.Environment.EnvironmentName);
|
||||
|
||||
@@ -2,6 +2,7 @@ using OpenTelemetry.Metrics;
|
||||
using OpenTelemetry.Resources;
|
||||
using OpenTelemetry.Trace;
|
||||
using Tiku.Infrastructure.Observability;
|
||||
using Tiku.Infrastructure.Security;
|
||||
|
||||
namespace Tiku.Api.Configuration;
|
||||
|
||||
@@ -28,7 +29,8 @@ internal static class ObservabilityExtensions
|
||||
.WithMetrics(metrics => metrics
|
||||
.AddAspNetCoreInstrumentation()
|
||||
.AddHttpClientInstrumentation()
|
||||
.AddMeter(DatabasePerformanceTelemetry.MeterName, WorkerTelemetry.MeterName, "Tiku.Security.Redis", "Npgsql")
|
||||
.AddMeter(DatabasePerformanceTelemetry.MeterName, WorkerTelemetry.MeterName,
|
||||
AuthorizationCacheTelemetry.MeterName, "Tiku.Security.Redis", "Npgsql")
|
||||
.ApplyIf(hasOtlpEndpoint, builder => builder.AddOtlpExporter(options => options.Endpoint = endpointUri!)));
|
||||
|
||||
return services;
|
||||
|
||||
Reference in New Issue
Block a user