Включение аутентификации basi c на ASP NET Core - 404 - PullRequest
1 голос
/ 17 марта 2020

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

https://github.com/blowdart/idunno.Authentication/tree/master/src/idunno.Authentication.Basic

Я реализовал запуск точно так, как он говорит

Однако каждый раз, когда я отправляю сообщение в конечную точку WeatherForecast, я получаю 404, если там есть идентификатор [Authorize]. Я немного прочитал и, следовательно, добавил AuthenticationSchemes, но результат тот же

Это не может быть пропущенное перенаправление, что является другой проблемой, так как контроллер просто возвращает содержимое на этой странице?

Пожалуйста, можете кто-то указывает мне правильное направление?

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddMvc();
        services.AddRazorPages();
        services.AddControllersWithViews();

        services.AddAuthentication(BasicAuthenticationDefaults.AuthenticationScheme)
        .AddBasic(options =>
        {
            //options.Realm = "idunno";

            options.Events = new BasicAuthenticationEvents
            {
                OnValidateCredentials = context =>
                {
                    if (context.Username == context.Password)
                    {
                        var claims = new[]
                        {
                            new Claim(
                                ClaimTypes.NameIdentifier,
                                context.Username,
                                ClaimValueTypes.String,
                                context.Options.ClaimsIssuer),
                            new Claim(
                                ClaimTypes.Name,
                                context.Username,
                                ClaimValueTypes.String,
                                context.Options.ClaimsIssuer)
                        };

                        context.Principal = new ClaimsPrincipal(
                            new ClaimsIdentity(claims, context.Scheme.Name));
                        context.Success();
                    }

                    return Task.CompletedTask;
                }
            };
        });
    }

Тогда этот

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        app.UseAuthentication();
        app.UseAuthorization();
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Контроллер выглядит так:

[Route("[controller]")]
[Authorize(AuthenticationSchemes = idunno.Authentication.Basic.BasicAuthenticationDefaults.AuthenticationScheme)]
public class WeatherForecastController : ControllerBase
{
    [HttpGet]
    public ActionController<WeatherForecast> Get()
    {
        return Content("Authorised"); 
    }
}

1 Ответ

0 голосов
/ 17 марта 2020

Согласно комментарию, некоторые команды были в неправильном порядке

...