WebSecurity如何.IsAuthenticated检查您是否重新登录

本文关键字:新登录 登录 是否 如何 IsAuthenticated 检查 WebSecurity | 更新日期: 2023-09-27 18:13:27

这可能是一个愚蠢的问题,但我已经在谷歌上找了很长时间,也找不到答案。

我正在创建一个数据库在另一个大陆的网站,所以速度是一个关键问题。

据我所知,

 WebSecurity.Login(form.userName, form.password))

初始检查它初始设置的数据库,如果用户名和pw正确,则登录。

对于我编写的每个后端函数,我都使用

[Authorize]

属性和

if (WebSecurity.IsAuthenticated)
{ .... }

在执行任何操作之前。WebSecurity也是如此。IsAuthenticated检查数据库是否已登录?我只是想知道为了速度的原因。

还有把[授权]和WebSecurity。IsAuthenticated在每个后端方法?

感谢您的帮助和意见

WebSecurity如何.IsAuthenticated检查您是否重新登录

WebSecurity也是如此。IsAuthenticated检查数据库是否已登录?

不,它只是检查当前请求中的主体对象是否将身份验证标志设置为true。

通常主体对象由认证模块设置,不同的模块很少。大多数使用cookie来保存认证用户的信息(例如Forms, SessionAuthentication),如果cookie存在并且有效,模块为请求设置主体,您可以通过调用:

HttpContext.Current.User

在你的代码的任何方法(假设调用是由一个设置了HttpContext.Current的web应用程序)。

一些身份验证模块可以依赖于其他身份验证因素,例如Windows身份验证依赖于NTLM/Kerberos协议,而NTLM/Kerberos协议反过来依赖于特定的标头而不是cookie。

还有把[授权]和WebSecurity。

每个后端方法的IsAuthenticated

是和不是。

你所说的"每个后端方法"很可能是指MVC应用程序中的控制器/操作方法。如果是这样的话,,你不必在控制器/操作方法中重复这两种方法。

但在任何其他方法在你的后端,不是一个控制器/动作,WebSecurity.IsAuthenticated仍然工作,而Action属性不。

因此,如果"每种方法"字面上是指所有可能的方法,那么答案是,这两个不是多余的。一个总是工作,另一个-仅在MVC控制器。

除了@Wiktor Zychla所说的,值得注意的是,WebSecurity.IsAuthenticated在功能上与Request.IsAuthenticated相同;确切地说,它是一个包装器:

namespace WebMatrix.WebData
{
    //other class content omitted for brevity
    public static class WebSecurity
    {
        //Context
        internal static HttpContextBase Context
        {
            get { return new HttpContextWrapper(HttpContext.Current); }
        }
        //Request
        internal static HttpRequestBase Request
        {
            get { return Context.Request; }
        }
        //WebSecurity.IsAuthenticated 
        public static bool IsAuthenticated
        {
            get {  return Request.IsAuthenticated; }
        }
    }
}

所以如果你把上面所有的放在一起,WebSecurity.IsAuthenticated等于HttpContextWrapper(HttpContext.Current).Request.IsAuthenticated

旁白:正如其他答案和评论中正确陈述的那样,[Authorize]用于指定对控制器和动作方法的访问:

指定对控制器或操作方法的访问仅限于满足授权要求的用户。(源)

所以IsAuthenticated对动作方法和非动作方法都有效,而[Authorize]只对控制器和动作方法有效,这使得在动作方法上使用这两种方法确实是多余的。