Чтобы обеспечить безопасность от атак XSRF/CSRF, я реализовал токены защиты от подделки, используя .NET 8. Однако во время тестирования я столкнулся с ошибкой, связанной с расшифровкой токена защиты от подделки.
Конкретное сообщение об ошибке:
"Токен защиты от подделки не может быть расшифрован. Ключ {xxxxx-yyy-aaaa-bbb-ccccccc} не найден в наборе ключей.
Эта проблема сохраняется, несмотря на соблюдение стандартных методов реализации. Вот ресурсы, на которые я ссылался:
https://learn.microsoft.com/en-us/aspne ... aspnetcore -8,0
https://www.dotnetcurry.com/aspnet/1343 ... gery-token
Код:< /p>
Код: Выделить всё
public class Program
{
public static async Task Main(string[] args)
{
StaticLogger.EnsureInitialized();
Log.Information("Server Booting Up...");
try
{
var builder = WebApplication.CreateBuilder(args);
// Add XSRF protection services
builder.Services.AddAntiforgeryServices();
var app = builder.Build();
app.UseAntiforgeryMiddleware();
app.Run();
}
catch (Exception ex) when (!ex.GetType().Name.Equals("StopTheHostException", StringComparison.Ordinal))
{
StaticLogger.EnsureInitialized();
Log.Fatal(ex, "Unhandled exception");
}
finally
{
StaticLogger.EnsureInitialized();
Log.Information("Server Shutting down...");
Log.CloseAndFlush();
}
}
}
public static class Extensions
{
///
/// Adds the antiforgery services.
///
///
The services.
/// returns the antiforgery services.
public static IServiceCollection AddAntiforgeryServices(this IServiceCollection services)
{
var enableAntiforgeryToken = FeatureManagerService.IsFeatureEnabled(nameof(FeatureFlags.EnableAntiforgeryToken));
if (enableAntiforgeryToken)
{
services.AddMvc(options =>
{
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});
/// Configuring ApplicationDiscriminator to set the same value across all the microservices to access the cookie for validating request.
/// for reference: https://github1s.com/dotnet/aspnetcore/blob/main/src/DataProtection/DataProtection/src/DataProtectionOptions.cs
services.Configure(x => { x.ApplicationDiscriminator = Constants.AntiforgeryConstants.XXSRFTOKEN; });
services.AddAntiforgery(options =>
{
options.HeaderName = Constants.AntiforgeryConstants.XXSRFTOKEN;
});
services.AddScoped();
}
return services;
}
///
/// Uses the antiforgery.
///
/// The application.
/// returns the antiforgery middleware.
public static IApplicationBuilder UseAntiforgeryMiddleware(this IApplicationBuilder app)
{
var enableAntiforgery = FeatureManagerService.IsFeatureEnabled(nameof(FeatureFlags.EnableAntiforgeryToken));
return app.UseIf(enableAntiforgery,
x => x.UseMiddleware());
}
}
Я был бы признателен за любые идеи или предложения о том, как решить эту проблему расшифровки. Мог ли я пропустить какой-то этап настройки, особенно касающийся развертывания в нескольких регионах?
Может ли кто-нибудь помочь мне здесь, предоставив свои рекомендации? Любая помощь будет принята с благодарностью.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -across-mu