C# WebSecurity.IsAuthenticated如何检查您是否登录?
这可能是一个愚蠢的问题,但我在谷歌上仔细研究了一下,没有找到答案 我正在创建一个数据库位于另一个大陆的网站,因此速度是一个关键问题 据我了解,C# WebSecurity.IsAuthenticated如何检查您是否登录?,c#,asp.net,.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 4,这可能是一个愚蠢的问题,但我在谷歌上仔细研究了一下,没有找到答案 我正在创建一个数据库位于另一个大陆的网站,因此速度是一个关键问题 据我了解, WebSecurity.Login(form.userName, form.password)) 首先检查初始设置的数据库,如果用户名和密码正确,请登录 现在,对于我正在编写的每个后端函数,我都坚持 [Authorize] 属性与a if (WebSecurity.IsAuthenticated) { .... } 在执行任何操作之前。那么Web
WebSecurity.Login(form.userName, form.password))
首先检查初始设置的数据库,如果用户名和密码正确,请登录
现在,对于我正在编写的每个后端函数,我都坚持
[Authorize]
属性与a
if (WebSecurity.IsAuthenticated)
{ .... }
在执行任何操作之前。那么WebSecurity.IsAuthenticated是否检查数据库以检查它是否已登录?我只是想知道速度的原因
另外,在每个后端方法中放置[Authorize]和WebSecurity.IsAuthenticated是否也是多余的
谢谢你的帮助和意见
那么WebSecurity.IsAuthenticated是否检查数据库以检查它是否已登录
不,它只是检查当前请求中的主体对象是否将身份验证标志设置为true
通常,主体对象由身份验证模块设置,很少有不同的模块。大多数使用cookie保存已验证用户的信息,例如表单、会话身份验证。如果cookie存在且有效,则模块会为请求设置主体,您可以通过调用:
HttpContext.Current.User
在代码的任何方法中,假设调用是从设置HttpContext.Current的web应用程序进行的
某些身份验证模块可以依赖于其他身份验证因素,例如Windows身份验证依赖于NTLM/Kerberos协议,而NTLM/Kerberos协议又依赖于特定的头,而不是cookie
另外,在每个后端方法中放置[Authorize]和WebSecurity.IsAuthenticated也是多余的
是和否
每个后端方法最可能指的是MVC应用程序中的控制器/操作方法。如果是这样,那么,是的,您不必在控制器/动作方法中重复这两个步骤
但是在后端的任何其他非控制器/操作的方法中,WebSecurity.IsAuthenticated仍然有效,而action属性则无效
因此,如果你所说的每一种方法都是指每一种可能的方法,那么答案是否定的,这两种方法并不是多余的。一个始终有效,另一个仅在MVC控制器中有效
那么WebSecurity.IsAuthenticated是否检查数据库以检查它是否已登录
不,它只是检查当前请求中的主体对象是否将身份验证标志设置为true
通常,主体对象由身份验证模块设置,很少有不同的模块。大多数使用cookie保存已验证用户的信息,例如表单、会话身份验证。如果cookie存在且有效,则模块会为请求设置主体,您可以通过调用:
HttpContext.Current.User
在代码的任何方法中,假设调用是从设置HttpContext.Current的web应用程序进行的
某些身份验证模块可以依赖于其他身份验证因素,例如Windows身份验证依赖于NTLM/Kerberos协议,而NTLM/Kerberos协议又依赖于特定的头,而不是cookie
另外,在每个后端方法中放置[Authorize]和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等于HttpContextWrapperHttpContext.Current.Request.IsAuthenticated
旁白:正如其他答案和评论中正确指出的那样,[授权]用于指定对控制器的访问和操作方法:
指定对控制器或操作方法的访问仅限于满足授权要求的用户
因此,IsAuthenticated对动作方法和非动作方法都有效,而[Authority]只对控制器和动作方法有效,这使得在动作方法上同时使用这两种方法确实是多余的。除了@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; }
}
}
}
所以如果你把上面所有的t
同时,WebSecurity.IsAuthenticated等于HttpContextWrapperHttpContext.Current.Request.IsAuthenticated
旁白:正如其他答案和评论中正确指出的那样,[授权]用于指定对控制器的访问和操作方法:
指定对控制器或操作方法的访问仅限于满足授权要求的用户
因此,IsAuthenticated对操作方法和非操作方法都有效,而[Authority]只对控制器和操作方法有效,这使得在操作方法上同时使用这两种方法确实是多余的。我相信它只检查客户端是否有身份验证cookie集。是的,我相信,至少在较旧的实现(如.NET2中的成员资格功能)中,它是这样工作的。我还认为,使用[Authorize]属性修饰方法和使用WebSecurity检查方法都是多余的。IsAuthenticated。[Authorize]是一个操作筛选器,应用于非操作的方法时无效。JsonResult是mvc控制器操作的返回类型,这是Ban mvc controller上可路由方法的名称,如果这是后端函数的意思,则仅应用“授权”属性就足够了。@HaukurHaf:不一定是cookie,这取决于实际使用的自动验证方案。在Windows身份验证的情况下,没有身份验证cookie,有ntlm/kerberos头。我相信它只检查客户端是否有身份验证cookie集。是的,至少在较旧的实现中,如.NET 2中的成员资格功能,它是这样工作的。我还认为,使用[Authorize]属性修饰方法和使用WebSecurity检查方法都是多余的。IsAuthenticated。[Authorize]是一个操作筛选器,应用于非操作的方法时无效。JsonResult是mvc控制器操作的返回类型,这是Ban mvc controller上可路由方法的名称,如果这是后端函数的意思,则仅应用“授权”属性就足够了。@HaukurHaf:不一定是cookie,这取决于实际使用的自动验证方案。在Windows身份验证的情况下,没有身份验证Cookie,存在ntlm/kerberos头。