通过web.config进行身份验证无法在ASP.net 3.5中进行身份验证
这是一件应该非常简单的事情,我只是无法弄清楚为什么它不起作用。通过web.config进行身份验证无法在ASP.net 3.5中进行身份验证
我想设置一些ASP.net 3.5应用程序的快速身份验证,但在web.config文件中存储用户名和密码(我知道它不是很安全,但它是一个内部应用程序,我不断获得要求添加和删除登录,所以这是最快的方式)。
因此,相关的配置部分看起来是这样的:
<authentication mode="Forms">
<forms loginUrl="~/login.aspx">
<credentials>
<user name="user" password="password" />
<user name="user2" password="password2" />
</credentials>
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
而且,在登录页面,代码如下所示:
string username = tbUsername.Text;
string password = tbPassword.Text;
if (FormsAuthentication.Authenticate(username, password))
FormsAuthentication.RedirectFromLoginPage(username, false);
但是,FormsAuthentication.Authenticate(用户名,密码)总是返回false。我无法弄清楚为什么。
我甚至尝试使用Membership.ValidateUser,但只是将本地数据库添加到App_Data文件夹中。
有没有什么真正的基本我在这里忘了或者在.net 3.5中完全不工作?
我不确定这是否在.NET 3.5中发生了变化,但<credentials>
元素的属性passwordFormat
定义了web.config
中的密码格式。从MSDN documentation for .NET 3.5开始,默认格式是SHA1。
如果您使用明文用户名和密码在你web.config
,你应该使用:
...
<credentials passwordFormat="Clear">
...
事件,虽然这是一个内部应用程序我还是建议至少散列密码,而不是把它留在明文。
我认为原因是因为你没有指明passwordFormat。 http://msdn.microsoft.com/en-us/library/e01fc50a.aspx
默认为SHA1,因此您的明文实际上没有正确使用。
当您以明文形式存储密码时,您必须指定<credentials passwordFormat="Clear">
。
替代品是使用MD5或SHA1加密的密码。
您可能还会考虑使用一些可用的用户控件,它们会自动为您执行很多操作。查看Visual Studio中控件工具箱中的“登录”部分。
以下页面提供您需要为这个简单的情况下,一切,和Login控件的外观是完全可定制:
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
e.Authenticated = FormsAuthentication.Authenticate(Login1.UserName, Login1.Password);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Login</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Login ID="Login1" runat="server" onauthenticate="Login1_Authenticate">
</asp:Login>
</div>
</form>
</body>
</html>
另一个可能的陷阱,那就是用户名“admin”似乎是特殊的,如果你测试一个在网上设置的证书,就不会被尊敬。配置
<credentials>
<user name="Admin" password="somepassword" /> //Authentication always returns false for me
</credentials>
<credentials>
<user name="MyName" password="somepassword" /> //Authentication works normally
</credentials>
的问题似乎并不在你的情况下适用,但我只花了一个小时搞清楚了这一点,所以我想我会在这里记录下来。
我发现该解决方案........首先,您必须通过使用FormsAuthentication.HashPasswordForStoringInConfigFile(“abc”,“SHA1”)在文本框中运行程序,然后在
中提供此值
魔法,就是这样!当我读到这些时,会有一些额头碰到手掌。惊人的是你星期五下午忘记了什么。非常感谢! – 2009-07-17 12:46:45