如何在没有凭据提示的情况下将未经身份验证的用户重定向到页面



我的本地ASP.Net Core 3.1 web应用程序部署在IIS上,并且仅启用了windows身份验证。

如何在不弹出凭据提示的情况下将未经身份验证的用户重定向到视图?例如,转到PublicIndex而不提示用户输入登录详细信息。这可能吗?

我需要实现自定义属性/过滤器来拦截如下请求吗?或者我可以在Startup.cs中进行某种路由配置吗?

// Private page for authenticated users
[RedirectToPublicIndexIfNotAuthenticated]
public async Task<IActionResult> AuthenticatedIndex()
{
return View();
}
// Public page for anonymous users
public async Task<IActionResult> PublicIndex()
{
return View();
}

在这种情况下有两种不同的方法但由于第一个解决方案将更改选项。LoginPath值到您希望重定向未经授权用户的操作-位于服务中。StartUp.cs中的AddAuthentication((方法-这不是一个好主意(因为这可能会给您的登录操作带来一些问题(。

因此,我强烈建议您使用以下步骤的第二种解决方案

您必须使用声明规范登录用户,因此每当授权用户试图进入您的操作时,您已经保存了他的用户名、电子邮件或这些信息。以下是登录时使用Claims保存用户帐户信息的示例…

var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.Username),
new Claim(ClaimTypes.Email, user.Email)
};

正如您所看到的,我们可以随时使用User.Identity.Name变量访问授权用户的用户名。但如果用户未经授权,它将给我们一个空值。

通过使用这个技巧,你可以在你想要的每一个动作中控制和重定向你的用户

// Private page for authorized users
[Authorized]
public IActionResult AuthenticatedIndex()
{
#region Conditions

if (User.Identity.Name == null)
{
return RedirectToAction("PublicIndex", "Home", new { area = "" });
}
#endregion
return View();
}
// Public page for anonymous users
public IActionResult PublicIndex()
{
return View();
}

希望它有用,祝你好运

最新更新