Ядро веб-API возвращает 404 при добавлении атрибута авторизации - PullRequest
0 голосов
/ 27 августа 2018

Я новичок в .net core и пытаюсь создать ядро ​​web api, которое реализует jwt для аутентификации и авторизации.

Внутри класса запуска я настроил его так:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<MandarinDBContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("MyConnection")));

        services.AddIdentity<User, Role>()
        .AddEntityFrameworkStores<MyDBContext>()
        .AddDefaultTokenProviders();

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = false,
                        ValidateAudience = false,
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,
                        ValidIssuer = "yourdomain.com",
                        ValidAudience = "yourdomain.com",
                        IssuerSigningKey = new SymmetricSecurityKey(
                            Encoding.UTF8.GetBytes("My secret goes here"))
                    };

                    options.RequireHttpsMetadata = false;
                });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        // Add application services.
        services.AddTransient<IUserService, UserService>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();

        app.UseAuthentication();
        app.UseMvc();
    }
}

Но когда я пытаюсь вызвать следующее действие:

    [Authorize]
    [HttpGet]
    [Route("api/Tokens")]
    public IActionResult TestAuthorization()
    {
        return Ok("You're Authorized");
    }

Я получаю 404 не найден. Если я удаляю атрибут Authorize, он работает.

Не могли бы вы мне помочь решить эту проблему?

1 Ответ

0 голосов
/ 27 августа 2018

Это происходит, когда ваш API не авторизован, а ваш URL перенаправления не существует. При сбое аутентификации Web API отправит код 401. Теперь, если вы обрабатываете этот код на стороне клиента и выполняете перенаправление при ошибке авторизации, убедитесь, что перенаправленный URL-адрес существует. Также, Не добавляйте атрибут [Authorize] к контроллеру, который обрабатывает методы аутентификации (Вход / Регистрация) . Ваш виновник выглядит как атрибут Authorize. Так как вы используете схему аутентификации JWT. Ваш атрибут авторизации должен соответствовать

    [Authorize(AuthenticationSchemes = "Bearer")]
    [HttpGet]
    [Route("api/Tokens")]
    public IActionResult TestAuthorization()
    {
        return Ok("You're Authorized");
    }

Чтобы установить схему аутентификации по умолчанию, измените AddIdentity на AddIdentityCore. вот очень хорошая статья.

Использование аутентификации JwtBearer в базовом проекте ASP.NET только для API

...