Как указать пользовательский URL для выхода из системы при использовании аутентификации Azure AD в ядре .NET - PullRequest
0 голосов
/ 24 июня 2019

У меня есть веб-приложение ASP.NET core 2.2, в котором используются рабочие или школьные учетные записи (проверка подлинности Azure AD).Когда я выхожу, приложение заканчивается на

/ AzureAD / Аккаунт / SignedOut

Я хочу, чтобы оно перенаправляло обратно на домашнюю страницу, используя ВыходURL указанный при регистрации приложения.Смотрите ниже для скриншота.При указании здесь URL-адреса выхода Azure AD фактически вызывает эту страницу (для очистки данных сеанса), но затем она в конечном итоге оказывается в расположении / AzureAD / Account / SignedOut.Я не вижу где-либо еще, чтобы указать эквивалент URL выхода из системы.Вот код кнопки выхода, сгенерированный Visual Studio при использовании аутентификации Azure AD.

<a asp-area="AzureAD" asp-controller="Account" asp-action="SignOut">Sign out</a>

Я также пытался добавить перенаправление непосредственно в действие.

<a asp-area="AzureAD" asp-controller="Account" asp-route-post_logout_redirect_uri="https://localhost:44381" asp-action="SignOut">Sign out</a>

enter image description here

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Одним из способов является использование настраиваемого промежуточного программного обеспечения для перезаписи URL для перенаправления путем проверки пути, перед кодами введите app.UseMvc:

app.UseRewriter(
    new RewriteOptions().Add(
        context => { if (context.HttpContext.Request.Path == "/AzureAD/Account/SignedOut")
            { context.HttpContext.Response.Redirect("/Home/Index"); }
        })
);
0 голосов
/ 25 июня 2019

Проблема возникает из-за того, что встраиваемое AccountController.cs в ядре ASP.NET возвращает указанный вами URL-адрес:

        [HttpGet("{scheme?}")]
        public IActionResult SignOut([FromRoute] string scheme)
        {
            scheme = scheme ?? AzureADDefaults.AuthenticationScheme;
            var options = Options.Get(scheme);
            var callbackUrl = Url.Page("/Account/SignedOut", pageHandler: null, values: null, protocol: Request.Scheme);
            return SignOut(
                new AuthenticationProperties { RedirectUri = callbackUrl },
                options.CookieSchemeName,
                options.OpenIdConnectSchemeName);
        }

Обходной путь - создать собственный AccountController вместо использования стандартного, поставляемого с ASP.NET CORE, как показано ниже:

 public class AccountController : Controller
    {
        [HttpGet]
        public IActionResult SignIn()
        {
            var redirectUrl = Url.Action(nameof(HomeController.Index), "Home");
            return Challenge(
                new AuthenticationProperties { RedirectUri = redirectUrl },
                OpenIdConnectDefaults.AuthenticationScheme);
        }

        [HttpGet]
        public IActionResult SignOut()
        {
            var callbackUrl = Url.Action(nameof(SignedOut), "Account", values: null, protocol: Request.Scheme);
            return SignOut(
                new AuthenticationProperties { RedirectUri = callbackUrl },
                CookieAuthenticationDefaults.AuthenticationScheme,
                OpenIdConnectDefaults.AuthenticationScheme);
        }

        [HttpGet]
        public IActionResult SignedOut()
        {
            if (User.Identity.IsAuthenticated)
            {
                // Redirect to home page if the user is authenticated.
                return RedirectToAction(nameof(HomeController.Index), "Home");
            }

            return RedirectToAction(nameof(HomeController.Index), "ThePathYouWant");
        }

        [HttpGet]
        public IActionResult AccessDenied()
        {
            return View();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...