繁体   English   中英

防止在启动后重定向 ASP.NET Core MVC 应用程序

[英]Prevent redirecting ASP.NET Core MVC Application after start

我在 Visual Studio 2017 中创建了一个带有 Azure 身份验证的 ASP.NET MVC Core 2 应用程序。

我也在 Azure 上注册了该应用程序。

现在我单击 Ctrl+F5 从 Visual Studio 2017 启动应用程序。

我希望看到主页,但它重定向到https://login.microsoftonline.com/blablablabla

但我希望它仅在用户单击Sign in时重定向。

对于Asp.Net Core MVC 2.0内置模板,用于[Authorize]启用访问[HomeController]安全请求。

对于Asp.Net Core MVC 2.1内置模板,在Startup使用[Authorize]AuthorizeFilter

对于您的场景,您大多属于第二种情况。

请按照以下步骤操作:

  • HomeController删除[Authorize]

     //[Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); }
  • 删除services.AddMvc AuthorizeFilter

     services.AddMvc(options => { //var policy = new AuthorizationPolicyBuilder() // .RequireAuthenticatedUser() // .Build(); //options.Filters.Add(new AuthorizeFilter(policy)); }) .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

要停止重定向,您首先需要找到导致重定向的原因。 您通常可以通过两种方式触发登录请求 -

  1. [Authorize]属性装饰你的类/方法,这将强制登录请求。

  2. 发出如下所示的明确挑战..

     return Challenge( new AuthenticationProperties { RedirectUri = redirectUrl }, OpenIdConnectDefaults.AuthenticationScheme);

我没有看到有关您有问题的代码的足够详细信息......告诉您确切地进行更改以停止重定向的位置,但我可以猜测最可能的原因并向您展示示例。

这是 ASP.NET 核心示例的示例,它具有显式登录操作,代码可在 GitHub 上获得。

将 Azure AD 集成到 ASP.NET Core Web 应用程序中

具体来说,查看 AccountController 以了解如何强制登录。

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

此外,为了确保我可以在不被强制登录的情况下看到主页,我只是对 HomeController.cs 的示例代码进行了简单的更改。 我从 HomeController 中取出了[Authorize]属性,该属性存在于 GitHub 的原始代码中。 (否则您将在启动应用程序后立即强制登录)

namespace WebApp_OpenIDConnect_DotNet.Controllers
{ 
    // notice there is no [Authorize] attribute now, to make landing page available without signin
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

现在,如果有人明确单击顶部的登录链接,则只会提示他们输入凭据。 只要确保您的主页上不需要任何敏感信息,因为它现在可供所有人使用。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM