Jwt не работает после преобразования Asp.Net Core 1 в Core 2 - PullRequest
3 голосов
/ 09 мая 2019

Пример кода для аутентификации Jwt-Rsa-Hmac на этом веб-сайте с этим репо.
Я пытался преобразовать его из Asp.Net Core 1 в Asp.Net Core 2.
Я создал новый проект Asp.Net Cor 2.1 и после поиска необходимых изменений я нашел этот код.
Он создает токен, но при использовании токена я всегда получаю 401 (неавторизованный).
Прошло несколько дней и безуспешно ...
Буду благодарен, если кто-нибудь сможет мне помочь с этим.
Это мой стартап класс:

 public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }
        public IConfigurationRoot Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<JwtSettings>(Configuration.GetSection("jwt"));
            var x = services.AddSingleton<IJwtHandler, JwtHandler>();

            var sp = services.BuildServiceProvider();
            var jwtHandler = sp.GetService<IJwtHandler>();
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.TokenValidationParameters = jwtHandler.Parameters;
            });
            services.AddMvc();

        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseDeveloperExceptionPage();
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            app.UseAuthentication();
            app.UseMvc();
        }    

А остальная часть примера кода находится в этом репо.

Ссылки, которые я уже изучаю:
Проверка подлинности токена перестала работать после перехода с ASP.NET Core 1 на ASP.NET Core 2

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Проблема в вашем репозитории заключается в том, что вы создаете новый JwtBearerOptions здесь .

Я изменил его на это, и он прекрасно работает

services.AddAuthentication(o =>
{
    o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
    o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(o =>
{

    o.IncludeErrorDetails = true;
    o.RequireHttpsMetadata = false;
    o.TokenValidationParameters = jwtHandler.Parameters;
    o.Events = new JwtBearerEvents()
    {
        OnAuthenticationFailed = c =>
        {
            c.NoResult();

            c.Response.StatusCode = 401;
            c.Response.ContentType = "text/plain";

            return c.Response.WriteAsync(c.Exception.ToString());
        }

    };
});

Я отправил вам запрос на получение ответа .

0 голосов
/ 09 мая 2019

Я использовал этот параметр в .netcore2.1 и работаю для меня:

services.AddAuthentication(options =>
            {
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(cfg =>
            {
                cfg.SaveToken = true;
                cfg.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer = Configuration["BearerTokens:Issuer"],
                    ValidAudience = Configuration["BearerTokens:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["BearerTokens:Key"])),

                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                };

            });
...