2016-05-01 3 views
5

Я пытаюсь использовать проверку файлов cookie в основном приложении Asp.net (dnx 4.5). Обратите внимание, что, поскольку у меня есть собственный механизм аутентификации (радиус), я не использую готовый механизм, предоставляемый базовой аутентификацией. Когда пользователь не аутентифицирован, я хочу перенаправить на страницу входа в систему.Asp.net Core Authorize Redirection Not Happening

Я добавил в Startup.cs следующий код. Идея заключается в том, чтобы быть перенаправлена ​​на Входе контроллер, если пользователь не прошел проверку подлинности:

app.UseCookieAuthentication(options => { options.LoginPath = new Microsoft.AspNet.Http.PathString("/Login"); }); 

В моем главном контроллере у меня есть:

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

В моем Входе контроллере я возвращаю вид, соответствующий радиус для входа в систему:

[AllowAnonymous] 
public IActionResult Index() 
{ 
    return View(); 
} 

Однако, когда я запускаю приложение, перенаправление никогда не происходит. Глядя на консольный выход, я вижу следующее:

warn: Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker[0] 
     Authorization failed for the request at filter 'Microsoft.AspNet.Mvc.Filters.AuthorizeFilter'. 
info: Microsoft.AspNet.Mvc.ChallengeResult[1] 
     Executing ChallengeResult with authentication schemes(). 
info: Microsoft.AspNet.Mvc.Infrastructure.MvcRouteHandler[2] 
     Executed action ThingsProjectorWeb.Controllers.HomeController.Index in 0ms 
info: Microsoft.AspNet.Hosting.Internal.HostingEngine[2] 
     Request finished in 0.0016ms 401 

Любая помощь в том, как правильно настроить эту систему, была бы весьма признательна. Благодаря!

ответ

8

OK выяснил. Здесь все объяснено: https://docs.asp.net/en/latest/security/authentication/cookie.html

Мне не хватало options.AutomaticChallenge = true;, который автоматически перенаправляет вас на контроллер входа.

Вот обновленные варианты:

app.UseCookieAuthentication(options => { 
       options.LoginPath = new Microsoft.AspNet.Http.PathString("/Login"); 
       options.AutomaticChallenge = true; 
      }); 

UPDATE:

По версии 1.1.0 это:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
     LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login"), 
     AutomaticChallenge = true 
}); 
+0

Это не работает для меня на IISIntergration. На Kestrel я получаю идеальный 302, но на IIS я получаю 401. Есть ли что-нибудь, что вы сделали, чтобы заставить его работать и на IISIntergration? –

+0

@MitchDart Возможно, IIS по умолчанию использует FormsAuthentication. Попробуйте добавить <удалить name = "FormsAuthenticationModule" /> <удалить name = "FormsAuthentication" /> в настройках сети? – Strake

+0

Это тоже не работает для меня. Застрял в попытке перенаправить в течение двух дней. Вам нужно добавить сервис до этого? У меня есть: services.AddSession(); который должен добавить поддержку для этого. Уже устал от Core. Это просто не работает. – Sam

Смежные вопросы