c# mvc5 -检查用户是否在每个控制器方法中被验证的简单方法

本文关键字:方法 控制器 验证 简单 mvc5 检查 用户 是否 | 更新日期: 2023-09-27 17:53:24

我有一个控制器,我只希望通过身份验证的用户能够访问它。我是否必须在控制器中的每个方法中放入检查以验证用户是否经过身份验证,或者是否有其他方法来处理此问题?我可以用注释来代替吗?

来自我的控制器的例子:

public ActionResult Index()
        {
            if (UserVerified())
            {
               ...
            }
            return RedirectToAction("Login", "Account");
        }
    public ActionResult FacebookLogin()
    {
        if (UserVerified())
        {
           ....
        }
        return RedirectToAction("Login", "Account");
    }
    private bool UserVerified()
    {
        if (User != null && User.Identity != null && User.Identity.IsAuthenticated)
        {
            return true;
        }
        return false;
    }

c# mvc5 -检查用户是否在每个控制器方法中被验证的简单方法

可以使用AuthorizeAttribute。
把它放在每一个行动中。

[Authorize]
public ActionResult Index()
{
}
[Authorize]
public ActionResult FacebookLogin()
{
}

它会为你做所有的工作。检查当前用户是否通过身份验证。如果他已通过身份验证,则继续操作,如果他未通过身份验证,则返回主页。

也可以将此属性添加到控制器中。那么所有操作都需要授权。

[Authorize]
public class HomeController
{
    public ActionResult Index()
    {
    }
    public ActionResult FacebookLogin()
    {
    }
}

更新:是的,正如卡米尔所说。请读这篇文章。
http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api

你现在花一些时间,将会花更少的时间来问关于ASP的问题。. NET认证。

顺便说一下,你不需要检查
User != null && User.Identity != null

如果您使用默认身份验证,那么您可以始终确保User.Identity是正确的对象。可以直接访问User.Identity.IsAuthenticated

使用Authorize属性是一种方法(已经在这里回答了)。此外,如果您可能希望实现一些其他业务规则或筛选检查,您可以创建一个继承AuthorizeAttribute的筛选器类。

public class CustomAuthorizeFilter: AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {
            return false; //User not Authorized
        }
        else
        {
             //Check your conditions here
        }
     }
} 

然后将控制器或Action装饰为:

[CustomAuthorizeFilter]
public class SomeController
{
}  

您可以使用内置的[Authorize]属性。或者您也可以为相同的目的开发自定义属性。

你可以从这里开始设置你自己的属性:

创建定制属性

如果您想对每个操作方法执行验证,那么将该属性放在Controller级别,而不是每个操作方法。

可以在控制器方法上面使用[Authorize]属性。

请点击此链接

如果你想让认证规则应用到所有的控制器操作,你可以这样做:

[someAuthAttribute]
public class HomeController : Controller
{
   // pseudo
    public ActionResult Index() {
       return response;
    }
    public ActionResult FacebookLogin(){
       return response;
    }
}

其中Index()和FacebookLogin()将遵循[someAuthAttribute]的认证规则。您还可以使用这个"层次结构"将更具体的规则应用到您的操作方法中。这样的:

[someAuthAttribute]
public class HomeController : Controller
{
   // pseudo
    public ActionResult Index() {
       return response;
    }
    [someFBAuthAttribute]
    public ActionResult FacebookLogin(){
       return response;
    }
} 

可以从基控制器继承授权。

[Authorize(Roles = @"Domain'Group")]
public class BaseController : Controller
public class ChildController : BaseController