这是个好主意吗?通过设置会话变量对ASP.NET中的用户进行身份验证
为了在ASP.NET中对用户进行身份验证,我看到了如下代码这是个好主意吗?通过设置会话变量对ASP.NET中的用户进行身份验证,asp.net,Asp.net,为了在ASP.NET中对用户进行身份验证,我看到了如下代码 if (loginManager.Authenticate(username, password)) { Session["Authenticated"] = 1; } 在随后的请求中,只需检查Session[“Authenticated”]的值是否为1,以确定当前用户是否经过身份验证 这很简单。我的问题是:这与ASP.NET表单身份验证有何不同使用FormsAuthentication类创建一个authenticate co
if (loginManager.Authenticate(username, password))
{
Session["Authenticated"] = 1;
}
在随后的请求中,只需检查Session[“Authenticated”]
的值是否为1,以确定当前用户是否经过身份验证
这很简单。我的问题是:这与ASP.NET表单身份验证有何不同使用FormsAuthentication类创建一个authenticate cookie,并根据
user.Identity.IsAuthenticated
字段确定是否对用户进行了身份验证 使用会话进行身份验证既不是标准,也不是良好的做法,因为会话是使用通过FormsAuthentication类设置的SessionID
进行标识的。此类负责维护用户与服务器的会话绑定,可以使用cookie,也可以在禁用cookie的情况下通过重写it用户URL来维护会话ID
。虽然会话可能丢失或被破坏,但是SessionID
机制通过加密和检查每个请求来保护。支持这一论点还有许多其他原因。因此,简而言之,我建议使用标准方式。您应该使用表单身份验证,原因如下:
如果会话cookie和会话过期是同步的,那么可能没有区别。但情况并非总是如此。仅举一个例子-您将会话存储在ASP.NET的默认值中-InProc。但是由于某种原因,SessionState进程被重新启动、终止、终止,不管怎样——所有会话都消失了。然后,一个用户来到该站点——他有一个有效的身份验证cookie,并且经过身份验证。但无法检索该会话,因此将重新创建为新会话(session.IsNewSession=true)。因此,用户将根据FormsAuthentication进行身份验证,但不会有会话[“authenticated”]=1 我发现这篇文章在这方面非常有用: 用户的身份验证令牌和 他的疗程? 理想情况下,答案应该是否定的。你不应该依赖 会话数据可用于许多用户的安全相关问题 原因之一是关注点的分离。一个标记 处理用户访问权限,另一个处理跨网络存储用户数据 请求。然而,在许多情况下,开发人员选择存储用户的 会话中的访问权限,通常在同时允许 匿名和经过身份验证的访问,经过身份验证的用户具有 与匿名功能/页面相比,他们可以使用更多功能/页面So 而不是在用户的身份验证中存储访问权限令牌 cookie,开发人员选择将用户的访问权限存储在 用户会话(有时是因为被认为是 安全问题——然而,这通常是一个错误的担忧,因为 用户的身份验证令牌可以以非常高的强度进行加密 轻松通过中forms元素的protection属性 web.config)。但是,这假定会话不会在之前过期 身份验证–否则您将留下一个经过身份验证的 您实际上不知道其访问权限的用户,如 存储在现在已结束的会话中。面对这种情况, 许多开发人员认为设置会话就足够了 将超时设置为高于身份验证超时的值,并设置 将窗体身份验证的Expiration滑到true。思想 在此设置中,用户身份验证将首先过期, 使ASP.Net自动处理此问题并重定向用户 登录页面(如web.config中所设置)。如果会话仍然是 大约,它将被更新,如果没有,一个新的将被创建,然后 用户的访问权限将根据其登录设置
你可以在这本书中找到答案。