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检查数据库是否已登录?
不,它只是检查当前请求中的主体对象是否将身份验证标志设置为true。
通常主体对象由认证模块设置,不同的模块很少。大多数使用cookie来保存认证用户的信息(例如Forms
, SessionAuthentication
),如果cookie存在并且有效,模块为请求设置主体,您可以通过调用:
HttpContext.Current.User
在你的代码的任何方法(假设调用是由一个设置了HttpContext.Current
的web应用程序)。
一些身份验证模块可以依赖于其他身份验证因素,例如Windows
身份验证依赖于NTLM/Kerberos协议,而NTLM/Kerberos协议反过来依赖于特定的标头而不是cookie。
还有把[授权]和WebSecurity。
每个后端方法的IsAuthenticated
是和不是。
你所说的"每个后端方法"很可能是指MVC应用程序中的控制器/操作方法。如果是这样的话,是,你不必在控制器/操作方法中重复这两种方法。
但在任何其他方法在你的后端,不是一个控制器/动作,WebSecurity.IsAuthenticated
仍然工作,而Action
属性不。
除了@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]
只对控制器和动作方法有效,这使得在动作方法上使用这两种方法确实是多余的。