JWT не истекает - PullRequest
       39

JWT не истекает

0 голосов
/ 24 апреля 2020

Я использую 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";
            });
...