Как мне заставить эту Базовую Аутентификацию работать в .NET Core - PullRequest
0 голосов
/ 23 мая 2018

Я использую Basic Authentication, и я создал Middleware для этого.Когда я использую атрибут Authorize и пытаюсь выполнить вызов API через Почтальон, я получаю 401 Unauthorize, даже когда я добавляю данные авторизации в Почтальон.

Я не уверен, так ли этоя вызываю действие контроллера через почтальона или мне не хватает опции заголовка в почтальоне.

ConfigureServices

        services
            .AddAuthentication(BasicAuthenticationDefaults.AuthenticationScheme)
            .AddBasicAuthentication(GetBasicAuthenticationOptions(users));

Настройка

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
        app.UseCors("SiteCorsPolicy");
        app.UseAuthentication();
    }

Реализация базовой аутентификации

    private Action<BasicAuthenticationOptions> GetBasicAuthenticationOptions(IList<UserConfiguration> users)
    {
        return options =>
        {
            options.Realm = "Public API";
            options.Events = new BasicAuthenticationEvents
            {
                OnValidatePrincipal = context =>
                {
                    var authenticatedUser = users.FirstOrDefault(u =>
                        u.Username == context.UserName && u.Password == context.Password);

                    if (authenticatedUser != null)
                    {
                        var claims = new List<Claim>
                        {
                            new Claim(ClaimTypes.Name,
                                context.UserName,
                                context.Options.ClaimsIssuer)
                        };

                        var principal = new ClaimsPrincipal(new ClaimsIdentity(claims,
                            BasicAuthenticationDefaults.AuthenticationScheme));
                        context.Principal = principal;

                        return Task.CompletedTask;
                    }

                    return Task.FromResult(AuthenticateResult.Fail("Authentication failed."));
                }
            };
        };
    }

Действие контроллера с авторизацией

    [Authorize]
    [HttpPost]
    [Route("test")]
    public IActionResult Test()
    {
        return Json("yes");
    }

Запрос почтальона

Имя пользователя и пароли находятся в файле appsettings.json

enter image description here

1 Ответ

0 голосов
/ 25 мая 2018

Проблема была только потому, что app.UseMvc(); был помещен перед app.UseAuthentication();.Я просто должен был поставить app.UseMvc(); после app.UseAuthentication();, и это исправило это.

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