В настоящее время я реализую аутентификацию и авторизацию для проекта, используя JWT. < /p>
Я использую NextJs 15 для передней части и ASP.NET 8 для бэкэнд. Если токен не присутствует в заголовке: Authentication Bear или Access_token, я буду искать его в файле cookie, отправленных из Cross Origin. Странно для конечных точек без аннотации [авторизации], я все еще могу видеть файл cookie из запроса, и наоборот, они исчезают, что привело к ответу 401 < /p>
Кто -нибудь, пожалуйста, помогите мне, я застрял на этой проблеме в течение примерно 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();
});
});
}
< /code>
Аутентификация jwtbear config: < /p>
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>
Журнал запросов без [Auturize] аннотации:
log < /p>
Журнал запросов есть [Autorize] Annotation:
log < /p>
Подробнее здесь: https://stackoverflow.com/questions/796 ... sp-net-cor
Токен доступа не найден в cookie, отправленные из Axios с Credentials для ASP.net Core API ⇐ C#
Место общения программистов C#
1751581611
Anonymous
В настоящее время я реализую аутентификацию и авторизацию для проекта, используя JWT. < /p>
Я использую NextJs 15 для передней части и ASP.NET 8 для бэкэнд. Если токен не присутствует в заголовке: Authentication Bear или Access_token, я буду искать его в файле cookie, отправленных из Cross Origin. Странно для конечных точек без аннотации [авторизации], я все еще могу видеть файл cookie из запроса, и наоборот, они исчезают, что привело к ответу 401 < /p>
Кто -нибудь, пожалуйста, помогите мне, я застрял на этой проблеме в течение примерно 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();
});
});
}
< /code>
Аутентификация jwtbear config: < /p>
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>
Журнал запросов без [Auturize] аннотации:
log < /p>
Журнал запросов есть [Autorize] Annotation:
log < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/79689510/access-token-not-found-in-cookie-sent-from-axios-withcredentials-for-asp-net-cor[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия