这是ASP.NET Web应用程序进行身份验证的正确方法吗?

时间:2015-07-31 00:47:38

标签: c# asp.net authentication login

ASP.NET Web窗体应用程序。

我检查了我们公司的遗留代码,他们登录的方式是这样的: 当用户使用(用户名,密码)对数据库进行验证时,他们设置会话:

Session["authenticated"] = "true";

login.aspx以外的每个页面都继承自名为SecurePage的类。在SecurePage的{​​{1}}方法中,它会检查

OnInit()

如果为true,则表示已通过身份验证,否则表示未通过所以基本上进行身份验证的方法是查看是否存在名为if (Session["authenticated"] != null) 的会话。 这似乎是最粗略和直观的身份验证方式......我想问:这样安全吗?

我感到奇怪的另一件事是authenticated,他们有这个:

web.config

不应该是

<authentication mode="Windows" />

因为这些是网络应用程序?用户凭据存储在数据库中,这些用户位于客户端外(不是内部用户)。

在针对数据库验证用户后,稍有不同的版本也会这样做:

<authentication mode="Forms" />
这是做什么的?除FormsAuthentication.SetAuthCookie( username, true ); 中的此声明外,我没有看到任何其他页面有任何与auth cookie相关的代码。我们是否需要在代码中自己设置auth cookie,或者.NET框架是否已经为我们处理过这个问题?

还有另一个版本有以下内容:

login.aspx
这是做什么的?我们需要在代码中自己设置这个cookie吗?或者.NET框架是否已经为我们处理了这个问题?

这些网络应用程序是很久以前开发的,但我不确定何时。我怀疑它是.NET 1.0时代?根据我对.NET 2.0的理解, 它具有此ASP.NET成员资格,我们可以使用FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(login, false, 60); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)); Response.Cookies.Add(cookie); (和子文件夹<authentication>)中的<authorization>web.config标记来实现身份验证和授权的目标。不是吗?谁能给我一个ASP.NET框架认证机制的历史? (会员资格 - &gt;简单的会员 - &gt;身份?)

1 个答案:

答案 0 :(得分:0)

<authentication mode="Windows" />

以上内容应主要用于Intranet网站,因为它就像是使用计算机(windows pc)身份验证来访问资源。但是,这将永远不会起作用,因为继承的类有一个方法来验证登录的会话密钥值。

如果找不到会话密钥,您应确保代码将用户重定向到登录页面。这意味着,在下面代码的else部分中,您应该让用户登录页面再试一次。我肯定会发生这种情况。

    if (Session["authenticated"] != null)
{ /*user is authenticated*/ }else{ /*redirect to login*/ }

如果网站可通过互联网访问,建议使用<authentication mode="Forms" />。使用此设置的其他好处是您可以设置默认和登录页面。

最后,FormsAuthenticationTicket是一个具有属性和值的类,在使用Forms身份验证来识别经过身份验证的用户时会使用这些属性和值。

阅读msdn文章,了解有关asp.net会员资格的更多信息。 https://msdn.microsoft.com/en-us/library/yh26yfzy%28v=vs.140%29.aspx