通过web.config中的身份验证在ASP.net 3.5未认证(Authentication t

2019-06-26 05:27发布

这是这个东西,应该是非常简单,我只是不明白为什么它不工作之一。

我试图建立一个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在所有的工作?

Answer 1:

我不知道这是否.NET 3.5中发生了变化,但<credentials>元素具有属性passwordFormat定义格式的密码web.config 。 从MSDN文档.NET 3.5 ,默认格式是SHA1。

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

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

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



Answer 2:

我想原因是因为你没有标明了passwordFormat。 http://msdn.microsoft.com/en-us/library/e01fc50a.aspx

默认值是SHA1,因此实际上你的明文无法正常使用。



Answer 3:

您必须指定<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>


Answer 4:

另一个可能的缺陷是用户名“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>

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



Answer 5:

我发现这个解决方案........首先你必须使用FormsAuthentication.HashPasswordForStoringInConfigFile获得散列值(“ABC”,“SHA1”)在文本框中运行您的程序,然后提供该值



文章来源: Authentication through web.config not authenticating in ASP.net 3.5