12

これは非常に単純なものであり、なぜ機能しないのか分かりません。web.configを介した認証がASP.netで認証されていない3.5

私はASP.net 3.5アプリケーションのためのいくつかの非常に迅速な認証を設定しようとしていますが、web.configファイルにユーザー名とパスワードを格納しています(これはあまり安全ではないが、ログインの追加と削除を尋ねましたので、これは最も簡単な方法です)。

ので、関連する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>要素にはという属性があり、パスワードの形式はweb.configです。 MSDN documentation for .NET 3.5から、デフォルトの形式はSHA1です。

あなたweb.configに平文のユーザー名とパスワードを使用している場合は、あなたが使用する必要があります。

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

イベントこれは内部アプリケーションですが、私はまだ、少なくともパスワードをハッシュの代わりにそれを残してお勧めしますクリアテキスト。

+0

マジック、それでした!私はそれを読むときに額の良いビット - 手のひらを満たす。あなたが金曜日の午後に忘れたものを驚かせます。どうもありがとう! –

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

ユーザー名「管理者」があるように思われるということであるもう一つの可能​​な落とし穴あなたのウェブサイトに設定されている資格情報をテストする場合は、特別であり、敬意を表しません。コンフィグ

<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」)を使用してハッシュ値を取得する必要があり、その後

で、この値を提供最初........その解決策を見つけます
関連する問題