Что вводится в промежуточное ПО UseAuthorization из службы AddAuthentication? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть контроллер под названием Home, и он содержит 3 метода.

public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

        [Authorize]
        public IActionResult Secret()
        {
            return View();
        }

        public IActionResult Authenticate()
        {

            return RedirectToAction(nameof(Index));
        }
    }

, и в моих ConfigureServices у меня есть этот код:

 services.AddAuthentication("CookieAuth")
       .AddCookie("CookieAuth", config => {
             config.Cookie.Name = "Ali.Cookie";
             config.LoginPath = "/Home/Authenticate";
        });

, и в моем Configure у меня есть этот код:

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

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
            });
        }

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

1 Ответ

1 голос
/ 23 апреля 2020

UseAuthorization добавляет в приложение промежуточное ПО авторизации. Если приложение не использует авторизацию, вы можете безопасно удалить вызов app.UseAuthorization().

. Если вы хотите использовать функцию авторизации (например, атрибут Authorize или другой код), тогда необходим app.UseAuthorization() и применить атрибут Authorize к контроллеру / действию означает, что контроллеру / действию требуется зарегистрированный пользователь. Если пользователь не аутентифицирован, запускается схема аутентификации CookieAuth, которая перенаправляет пользователя на страницу входа по умолчанию для входа. Но проблема вашего кода в том, что UseAuthentication следует добавить до промежуточного программного обеспечения UseAuthorization, иначе аутентификация не будет работать, и пользователь может столкнуться с бесконечным l oop для вашего метода входа в систему:

app.UseRouting();
app.UseAuthentication();  <-- add this line 
app.UseAuthorization();

Вы можете проверьте документ для более подробной информации.

...