Описание ошибки в событии JWT:
Код: Выделить всё
OnAuthenticationFailed: IDX10503: Signature validation failed. Token does not have a kid. Keys tried: '[PII of type 'System.Text.StringBuilder' is hidden. For more details, see https://aka.ms/IdentityModel/PII.]'. Number of keys in TokenValidationParameters: '3'.
Number of keys in Configuration: '0'.
Exceptions caught:
'[PII of type 'System.Text.StringBuilder' is hidden. For more details, see https://aka.ms/IdentityModel/PII.]'.
token: '[PII of type 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken' is hidden. For more details, see https://aka.ms/IdentityModel/PII.]'. See https://aka.ms/IDX10503 for details.
Nuget пакет:
Код: Выделить всё
Пытаюсь вызвать URL-адрес защищенного токена:
[img]https:// i.sstatic.net/Z1TxsimS.png[/img]
Моя конфигурация JWT:
Код: Выделить всё
public static IServiceCollection FireBaseJWT(this IServiceCollection services, WebApplicationBuilder builder)
{
Console.WriteLine(Path.Combine(Directory.GetCurrentDirectory()));
// Initialize Firebase Admin SDK
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.FromFile(Path.Combine(Directory.GetCurrentDirectory(), "Config/firebase.json")),
});
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = builder.Configuration["FirebaseJwt:Firebase:ValidIssuer"];
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = builder.Configuration["FirebaseJwt:Firebase:ValidIssuer"],
ValidateAudience = true,
ValidAudience = builder.Configuration["FirebaseJwt:Firebase:ValidAudience"],
ValidateLifetime = true,
ValidateIssuerSigningKey = true
};
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
Console.WriteLine("OnAuthenticationFailed: " + context.Exception.Message);
return Task.CompletedTask;
},
OnTokenValidated = context =>
{
Console.WriteLine("OnTokenValidated: " + context.SecurityToken);
return Task.CompletedTask;
}
};
});
return services;
}
Код: Выделить всё
Program.cs:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
builder.Services.FireBaseJWT(builder);
builder.Services.AddAuthorization();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.MySwaggerConfig();
builder.Services.MyDIConfig();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
- Обычно в TokenValidationParameters должен быть IssuerSigningKey , который является нашим закрытым ключом, интересно, имеет ли он какое-либо отношение к ключу аутентификации Firebase на этом изображении:
- В этом документе говорится, что нам нужно вручную проверить токен, там также видео о создании промежуточного программного обеспечения для обработчика аутентификации. Стоит ли оно того, когда дело доходит до обработчика авторизации, поскольку нам нужно иметь дело с утверждениями.
Подробнее здесь: https://stackoverflow.com/questions/788 ... net-core-6