.NET CORE 2.1 JWT Bearer Authorization не вызывается по запросу - всегда возвращает 200 OK - PullRequest
0 голосов
/ 10 октября 2018

Я делаю проект, в котором у меня есть отдельный фронт и бэкэнд, и я хочу защитить свой API бэкэнда с токенами-носителями JWT.

Когда я отправляю запрос на получение от почтальона без каких-либо токенов, API всегда возвращает 200 OK.Консоль отладки подтверждает, что промежуточное ПО авторизации не было вызвано.Я однако получаю ошибку HTTPS ??Ниже приведена ссылка на изображение моей консоли (новые пользователи не могут иметь изображения непосредственно в вопросе).

Моя консоль

Я посмотрел на этот простой пример того, что мне нужно парня .Его работа без проблем, и консоль его приложения показывает авторизацию, вызываемую, и я получаю 401 Unauthorized.Когда я использую его подход, ничего не происходит, и я всегда получаю 200 ОК.

В файле startup.cs я оба пытался использовать services.AddMvc (), как показано ниже, но также services.AddMvcCore (). AddAuthorization ().Оба привели к тому, что авторизация не была вызвана

Вот мой startup.cs:

namespace API
{
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.AddCors();
        services.AddMvc();

        services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata = false;
                options.SaveToken = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = false,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer = Configuration["Jwt:Issuer"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
                };
            });

        var connection = Environment.GetEnvironmentVariable("DB");
        services.AddDbContext<CoPassContext>(options => options.UseSqlServer(connection));
        services.AddScoped<IRepository, Repository>();
    }

    // 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.UseCors(c => c
            .AllowCredentials()
            .AllowAnyHeader()
            .AllowAnyMethod()
            .AllowAnyOrigin());

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

}

Вот контроллер:

[Authorize]
[ApiController]
[Microsoft.AspNetCore.Mvc.Route("api/[controller]")]
public class CompanyController : ControllerBase
{
    private IDAO dao;

    public CompanyController(IDAO db)
    {
        dao = db;
    }

    [Microsoft.AspNetCore.Mvc.HttpGet("search/{keyword}")]
    public ActionResult<string> SearchCompanies(string keyword)
    {
        return JsonConvert.SerializeObject(dao.SearchCompanies(keyword));
    }

    // GET api/company/basic/5
    [Microsoft.AspNetCore.Mvc.HttpGet("basic/{id}")]
    public ActionResult<string> GetBasic(string id)
    {
        return dao.GetCompanyByRegNrBasic(id).ToString();
    }

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

С Mvc Core 2.2 вместо использования services.AddAuthorization(); do services.AddMvcCore().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddJsonFormatters().AddAuthorization(); в одной цепочке.

0 голосов
/ 09 июля 2019
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer = Configuration["Jwt:Issuer"],
                    ValidAudience = Configuration["Jwt:Issuer"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
                };
            });

Попробуйте это работает для меня.

0 голосов
/ 10 октября 2018

Похоже, вы забыли добавить авторизацию.

Как сказал @ ste-fu, попробуйте добавить это ниже служб. AddAuthentication (..);

services.AddAuthorization();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...