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」)在文本框中運行程序,然後在

中提供此值
相關問題