gpt4 book ai didi

c# - 认证中间件

转载 作者:行者123 更新时间:2023-11-30 21:47:19 28 4
gpt4 key购买 nike

我已经创建了一个 ASP.NET MVC 核心应用程序。我刚刚创建并登录了一个用户。现在我想弄清楚
1.如何保存用户登录信息
2.如何要求用户登录才能访问网站的其余部分。
用于保存用户日志信息。我打算使用 IdentityAsp.Net.Session,但我发现我找不到任何显示如何要求用户登录才能访问路由的内容,我不确定哪个选项最有效。
有人可以向我解释如何在访问路由之前要求身份验证,以及哪种保存的登录信息最适合该方法?

当前登录示例

    public ActionResult Login(LoginModel model){
if (ModelState.IsValid){
SqlConnect test = new SqlConnect("Data Source=/home/andrew/database.db","Accounts");
var check = test.count(model.UserName,model.Password);
if(check){
// Found in database
return RedirectToAction("Index","Home");
}
}

// If we got this far, something failed, redisplay form
return RedirectToAction("Error","Home");
}

最佳答案

你不应该保护路线。当使用占位符时(例如在默认路由中),可能不止一个路由可以到达一个操作方法。随着您的应用程序随时间发生变化,这些备用路径肯定很难(几乎不可能)保持安全。

因此,最好的选择是通过阻止提供资源来保护资源。请注意,这也是 ASP.NET 中安全性的工作方式,因此 ASP.NET 和 MVC 都使用相同的机制(IPrincipalIIdentity)来控制身份验证和授权。 Microsoft 的 ASP.NET Identity 和较旧的安全框架都使用此扩展点来插入 MVC 和 ASP.NET。

在 MVC 中,AuthorizeAttribute 使用这些接口(interface)来保护操作方法。 AuthorizeAttribute 可以通过多种方式使用:

关于行动方法

public class MyController
{
[Authorize(Roles = "Admin,SuperUser")]
public ActionResult Index()
{
return View();
{
}

在 Controller 上

[Authorize(Roles = "Admin,SuperUser")]
public class MyController
{
[AllowAnonymous] // All users have access
public ActionResult Index()
{
return View();
{

// Only authenticated users in Admin or SuperUser
// role have access
public ActionResult Contact()
{
return View();
{

// Only authenticated users in Admin or SuperUser
// role have access
public ActionResult About()
{
return View();
{
}

全局

public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
filters.Add(new HandleErrorAttribute());
}
}

这意味着只有经过身份验证的用户才能访问您应用程序中的任何操作方法。您还可以在此处使用角色,例如 filters.Add(new AuthorizeAttribute() { Roles = "Foo,Bar"});。您可以使用 AllowAnonymousAttribute 允许未经身份验证的用户访问特定的 Controller /操作。

您也可以subclass AuthorizeAttribute如果您有比用户和角色更复杂的业务逻辑。

关于c# - 认证中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516472/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com