12

这是一件应该非常简单的事情,我只是无法弄清楚为什么它不起作用。通过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中完全不工作?

回答

13

我不确定这是否在.NET 3.5中发生了变化,但<credentials>元素的属性passwordFormat定义了web.config中的密码格式。从MSDN documentation for .NET 3.5开始,默认格式是SHA1。

如果您使用明文用户名和密码在你web.config,你应该使用:

... 
<credentials passwordFormat="Clear"> 
... 

事件,虽然这是一个内部应用程序我还是建议至少散列密码,而不是把它留在明文。

+0

魔法,就是这样!当我读到这些时,会有一些额头碰到手掌。惊人的是你星期五下午忘记了什么。非常感谢! – 2009-07-17 12:46:45

2

当您以明文形式存储密码时,您必须指定<credentials passwordFormat="Clear">

替代品是使用MD5或SHA1加密的密码。

请参阅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> 
2

另一个可能的陷阱,那就是用户名“admin”似乎是特殊的,如果你测试一个在网上设置的证书,就不会被尊敬。配置

<credentials> 
<user name="Admin" password="somepassword" /> //Authentication always returns false for me 
</credentials> 

<credentials> 
<user name="MyName" password="somepassword" /> //Authentication works normally 
</credentials> 

的问题似乎并不在你的情况下适用,但我只花了一个小时搞清楚了这一点,所以我想我会在这里记录下来。

-3

我发现该解决方案........首先,您必须通过使用FormsAuthentication.HashPasswordForStoringInConfigFile(“abc”,“SHA1”)在文本框中运行程序,然后在

中提供此值
相关问题