AuthorizeAttribute перенаправляет на неверный URL при развертывании на веб-сайте с поддоменом - PullRequest
1 голос
/ 10 мая 2019

Обычно (на моем локальном хосте, например), [Authorize] правильно перенаправляет на LoginPath, указанное в CookieAuthenticationOptions.

Однако при развертывании на моем промежуточном сайте (staging.mysite.com),перенаправление санкционирования, кажется, неправильно помещает часть URL.В моем случае, он будет:

http://staging/Account.mysite.com/Login?ReturnUrl=%2FHome%2FAuthorize

, когда он должен:

http://staging.mysite.com/Account/Login?ReturnUrl=%2FHome%2FAuthorize

Приложение оченьbasic:

//Startup.cs
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
   .AddCookie(options =>
   {
       options.LoginPath = "/Account/Login";
       options.LogoutPath = "/Account/Logout";
       options.AccessDeniedPath = "/Home/Unauthorized";
       options.ReturnUrlParameter = "ReturnUrl";
   });

services.AddMvc()

//....

app.UseMvc();

Мои контроллеры:

//HomeController.cs
[Route("[controller]/[action]")]
public class HomeController : Controller
{
    [Authorize]
    public IActionResult Authorize()
    {
        return Ok("You are authorized");
    }
}

//AccountController.cs
[Route("[controller]/[action]")]
public class AccountController : Controller
{
    public IActionResult Login()
    {
        return View(new LoginViewModel());
    }
}

Кто-нибудь видел, где я иду не так?


ОБНОВЛЕНИЕ:

Странно, если я сделаю изменения ниже, это работает.Так что, похоже, проблема в том, что действие указано в маршруте?

options.LoginPath = "/Login"; //I removed /Account


[HttpGet("/Login")] //I added the "/Login" template
public IActionResult Login()

Ответы [ 3 ]

2 голосов
/ 10 мая 2019

попробуйте

options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");

Изменить, удалить

options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");

и добавить

options.Events = new CookieAuthenticationEvents()
        {
            OnRedirectToLogin = (context) =>
            {
                context.HttpContext.Response.Redirect("http://staging.mysite.com/Account/Login?ReturnUrl=%2FHome%2FAuthorize");
                return Task.CompletedTask;
            }
        };
0 голосов
/ 14 мая 2019

Обнаружена проблема.

Проблема была , а не с ядром asp.net или моим приложением.

Проблема была с регулярным выражением перенаправления, которое мы использовали в IIS.

0 голосов
/ 11 мая 2019

Вы определили маршрут как это?

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
    );

Если не добавить его в RouteConfig.cs.Или вы можете определить маршрут непосредственно с помощью [Маршрут («маршрут»)].

...