Authencation的中间件

时间:2016-07-22 00:41:12

标签: c# asp.net asp.net-mvc authentication asp.net-core

我创建了一个ASP.NET MVC核心应用程序。我刚刚完成创建并登录用户。现在我想弄清楚 1。如何保存用户登录信息
2。如何要求用户登录以访问网站的其余部分 用于保存用户日志信息。我打算使用身份 Asp.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");
    }

1 个答案:

答案 0 :(得分:3)

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

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

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

关于行动方法

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

在控制器上

[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的未经身份验证的用户。

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