Bearer error="invalid_token", error_description="Ключ подписи не найден"C#

Место общения программистов C#
Anonymous
Bearer error="invalid_token", error_description="Ключ подписи не найден"

Сообщение Anonymous »

Пытаюсь использовать OpenApi и Scalar для добавления аутентификации в Asp.Net Core Web API.

Когда я вызываю авторизованный контроллер с помощью своего токена-носителя, я получаю следующее ответное сообщение:

Код: Выделить всё

Bearer error="invalid_token", error_description="The signature key was not found"
Вот мой program.cs:

Код: Выделить всё

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi;
using Scalar.AspNetCore;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddOpenApi("v1", options => { options.AddDocumentTransformer(); });
builder.Services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(o =>
{
o.RequireHttpsMetadata = false;
var key = Encoding.UTF8.GetBytes("Blah");
o.SaveToken = true;
o.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ClockSkew = TimeSpan.Zero,
IssuerSigningKey = new SymmetricSecurityKey(key)
};
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();

app.MapScalarApiReference(options =>
{
options.Title = "OnYerBike API Reference";
options.Theme = ScalarTheme.DeepSpace;
options.DefaultHttpClient = new(ScalarTarget.CSharp, ScalarClient.HttpClient);
options.CustomCss = "";
options.ShowSidebar = true;
options.AddPreferredSecuritySchemes("Bearer")
.AddHttpAuthentication("Bearer", auth =>
{
auth.Token = "jwtsample.fdfdf.fdfdf";

}).EnablePersistentAuthentication();
});
}

app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();

app.Run();
Вот мой класс BearerSecuritySchemeTransformer:

Код: Выделить всё

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.OpenApi;
using Microsoft.OpenApi;

// This class is only to add Bearer Token field for Scalar
internal sealed class BearerSecuritySchemeTransformer(
IAuthenticationSchemeProvider authenticationSchemeProvider
) : IOpenApiDocumentTransformer
{
public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransformerContext context, CancellationToken cancellationToken)
{
var authenticationSchemes = await authenticationSchemeProvider.GetAllSchemesAsync();

if (authenticationSchemes.Any(authScheme => authScheme.Name == "Bearer"))
{
document.Components ??= new OpenApiComponents();
document.Components.SecuritySchemes ??= new Dictionary();
document.Security ??= new List();

var securitySchemeId = "Bearer";

document.Components.SecuritySchemes.Add(securitySchemeId, new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer",
In = ParameterLocation.Header,
BearerFormat = "Json Web Token"
});

document.Security.Add(new OpenApiSecurityRequirement
{
[new OpenApiSecuritySchemeReference("Bearer", document)] = new List()
});
}
}
}
Не знаю, что я сделал не так, есть предложения?

Вернуться в «C#»