Токен доступа не найден в cookie, отправленные из Axios с Credentials для ASP.net Core Web APIC#

Место общения программистов C#
Ответить
Anonymous
 Токен доступа не найден в cookie, отправленные из Axios с Credentials для ASP.net Core Web API

Сообщение Anonymous »

Я в настоящее время реализую аутентификацию и авторизацию для проекта, используя jwt.
Я использую NextJs 15 для передней части и ASP.NET Core 8 для бэкэнд. Аутентификация для всего. Если токен не присутствует в заголовке: Authentication Bear или Access_token, я буду искать его в файле cookie, отправленных из Cross Origin. Как ни странно, для конечных точек без аннотации [Authorize] я все еще могу видеть файл cookie из запроса, и наоборот, они исчезают, что приводит к ответу 401
Кто -нибудь, пожалуйста, помогите мне, я застрял на этой проблеме около 2 дней. Я изучаю сеть только около 6 месяцев, и у меня все еще много недостатков < /p>
cors config: < /p>

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

public static void AddCorsPolicy(this IServiceCollection services, ConfigurationManager configuration)
{
var allowOrigins = configuration.GetSection("AllowedHostOrigins").Get() ?? [];
services.AddCors(options =>
{
options.AddPolicy(CorsConfiguration.DevelopmentPolicyName, builder =>
{
builder
.WithOrigins(allowOrigins)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});

options.AddPolicy(CorsConfiguration.ProductionPolicyName, builder =>
{
builder
.WithOrigins(allowOrigins)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
}
Аутентификация jwtbearer config:

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

public static void ConfigureAuthentication(this IServiceCollection services, ConfigurationManager configuration)
{
JwtAuthenticationOptions authOptions = new();
configuration.GetSection("JwtAuthentication").Bind(authOptions);

services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = authOptions.ValidateAudience,
ValidateLifetime = authOptions.ValidateLifetime,
ValidateIssuer = authOptions.ValidateIssuer,
ValidateIssuerSigningKey = authOptions.ValidateIssuerSigningKey,
ValidAudience = authOptions.ValidAudience,
ValidIssuer = authOptions.ValidIssuer,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authOptions.SecretKey))
};

options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{

string authHeader = context.Request.Headers["Authorization"].ToString();

if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Bearer "))
{
context.Token = authHeader.Substring("Bearer ".Length);
return Task.CompletedTask;
}

string? accessToken = context.Request.Headers["access_token"];
if (!String.IsNullOrEmpty(accessToken))
{
context.Token = accessToken;
}

string? tokenFormCookie = context.Request.Cookies["access_token"];

if (!string.IsNullOrEmpty(tokenFormCookie))
{
context.Token = tokenFormCookie;
}

return Task.CompletedTask;
},
OnForbidden = context =>
{
context.Response.ContentType = "application/json";
context.Response.StatusCode = StatusCodes.Status404NotFound;
return Task.CompletedTask;
}
};
});
}
< /code>
Program.cs
:

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

WebApplication app = builder.Build();

if (app.Environment.IsDevelopment())
app.UseMiddleware();

app.UseExceptionMiddleware(app.Environment.IsDevelopment() || app.Environment.IsStaging());

if (app.Environment.IsDevelopment()) app.UseSwaggerUi();
if (app.Environment.IsProduction())  app.UseHsts();

app.UseHttpsRedirection();
app.UseRouting();

if (app.Environment.IsDevelopment())
app.UseCors(CorsConfiguration.DevelopmentPolicyName);

if (app.Environment.IsProduction())
app.UseCors(CorsConfiguration.ProductionPolicyName);

app.UseAuthentication();
app.UseAuthorization();

// rate limiter
// database transaction
app.MapControllers();

app.Run();
< /code>
Request log without [Authorize]
аннотация:
log
журнал запроса, который имеет аннотация [Autorize] :


Подробнее здесь: https://stackoverflow.com/questions/796 ... sp-net-cor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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