这是这个东西,应该是非常简单,我只是不明白为什么它不工作之一。
我试图建立一个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文档.NET 3.5 ,默认格式是SHA1。
如果你使用你的明文用户名和密码web.config
,你应该使用:
...
<credentials passwordFormat="Clear">
...
事件虽然这是一个内部应用程序我还是建议至少散列密码,而不是把它留在明文的。
我想原因是因为你没有标明了passwordFormat。 http://msdn.microsoft.com/en-us/library/e01fc50a.aspx
默认值是SHA1,因此实际上你的明文无法正常使用。
您必须指定<credentials passwordFormat="Clear">
当你存储明文密码。
该方案是使用MD5或SHA-1加密的密码。
见http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.hashpasswordforstoringinconfigfile.aspx的功能,编码密码。
你也可以考虑使用一些自动做了很多对你可用的用户控件。 看看在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”似乎是特殊的,不兑现,如果你的测试在web.config中的凭证集
<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”)在文本框中运行您的程序,然后提供该值