Я использую Identity Server 4 для аутентификации и создания JWT с помощью efCore, у меня есть API и запрос get, который должен получить список данных, поэтому, когда я "захожу" с помощью Postman, генерируется токен, если Я снова вхожу в систему и использую первый токен, запрос get возвращает 401 и список данных, хотя у меня есть AllowAnonymous для этого указанного действия c, кто-нибудь знает причину такого поведения
Get конечная точка
[HttpGet]
[AllowAnonymous]
public override Task<ActionResult<List<DataVM>>> Get()
{
return base.Get();
}
CRUD skeliton
[HttpGet]
public virtual async Task<ActionResult<List<TValueModel>>> Get()
{
var userClaim = User.Claims.FirstOrDefault(c => c.Type == JwtClaimTypes.Subject);
List<TValueModel> records;
if (userClaim != null)
{
records = await Mediator.Send(new GetAll<TModel, TValueModel>
{
UserId = Guid.Parse(userClaim.Value)
});
return records;
}
records = await Mediator.Send(new GetAll<TModel, TValueModel>());
return records;
}
Запуск
services.AddIdentity<User, Role>(options =>
{
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.Configure<SecurityStampValidatorOptions>(options => options.ValidationInterval = TimeSpan.FromSeconds(10));
var builder = services.AddIdentityServer(options =>
{
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
})
.AddInMemoryIdentityResources(IdentityConfig.Ids)
.AddInMemoryApiResources(IdentityConfig.Apis)
.AddInMemoryClients(IdentityConfig.Clients)
.AddAspNetIdentity<User>();
builder.AddDeveloperSigningCredential();
services.AddTransient<IProfileService, ProfileService>();
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
options.DefaultForbidScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme;
})
.AddIdentityServerAuthentication(options =>
{
options.Authority = Configuration.GetValue<string>("Host");
options.RequireHttpsMetadata = false;
options.JwtBearerEvents.OnAuthenticationFailed =
C =>
{
C.Response.StatusCode = StatusCodes.Status401Unauthorized;
return Task.CompletedTask;
};
options.ApiName = "api1";
});