4

デフォルトの Sql MembershipProvider を使用する C# asp.net アプリがあります。私の web.config には、このプロバイダーの使用方法を制御するいくつかの設定があります。

enablePasswordRetrieval="false" 
enablePasswordReset="true"
requiresUniqueEmail="true"
passwordFormat="Hashed" 
minRequiredPasswordLength="5" 

私が直面している問題は、人々がパスワードをリセットすると、ResetPassword() メソッドが、必要以上に長いパスワードを返し、紛らわしい文字 (l、1、i、I、0、O) を含むように見えることです。 )。さらに、平文メッセージと HTML メッセージを含むメールをユーザーに送信しています (私は AlternateViews で MailMessage を使用しています)。パスワードに安全でない HTML 文字が含まれている場合、電子メール クライアントが HTML テキストをレンダリングするときに、パスワードが異なる可能性があります (たとえば、%、&、および < は HTML 安全とは言えません)。

web.config に属する「add」要素を調べましたが、ResetPassword() メソッドに特定の文字のみを含め、パスワードの長さを制限するための追加の構成プロパティはありません。

パスワードの長さを制限し、選択する文字セットを制限するように ResetPassword() メソッドを構成できますか?

現在、回避策があります: ResetPassword() を呼び出して、提供された回答が正しいことを確認し、インターネットからダウンロードしたRandomPassword ジェネレーターを使用して、好きなパスワードを生成します (あいまいな文字、HTML セーフ、および長さは 8 文字) で、ChangePassword() を呼び出して、ユーザーのパスワードを既にリセットした後に変更します。

私の回避策は厄介なようで、ResetPassword() を構成して自分のやりたいことを実行する方がよいと思いました。

ありがとう~!

コロラドテック

4

3 に答える 3

2

このGeneratePassword方法を使用すると、少なくとも、作成されたパスワードがMinRequiredPasswordLengthおよびの設定を満たすことが保証されますMinRequiredNonAlphanumericCharacters。私はこのようなことをしています:

// aUser is of class MembershipUser
string aTempPassword = aUser.ResetPassword();
string aNewPassword = Membership.GeneratePassword(
                           Membership.MinRequiredPasswordLength, 
                           Membership.MinRequiredNonAlphanumericCharacters);
aUser.ChangePassword(aTempPassword, aNewPassword);

最終的なパスワードに使用される文字セットを制御することはできないため、これは希望の 50% にすぎません。

(実際、それは私の観点からも、より重要な側面です。特に、中かっこのキーの組み合わせをうまく押すのに 10 分と 3 回のサポート コールが必要で、クリップボードが何であるかを知らないユーザーがいるResetPassword場合は、.最も嫌われている人物の一人。)

于 2010-04-02T17:30:47.650 に答える
2

ResetPassword() 呼び出しを「構成」するために何かできるとは思いません。ResetPassword() の動作を変更する独自のプロバイダーを作成できます。

このリンクは、あなたがすでに行っていると思われる同じ戦術を説明しています....

回避策/ハックを続けることが、最も簡単な方法かもしれません。:-)

ただし、独自のプロバイダーを作成する方法について詳しく知りたい場合は、これらのリンクを確認してください。

http://www.asp.net/learn/videos/video-189.aspx

http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

http://www.devx.com/asp/Article/29256/0/page/3

http://www.15seconds.com/issue/050216.htm

于 2010-04-02T16:51:34.710 に答える
1

これはすでに回答されていることは知っていますが、今日この問題に遭遇したので、2 セントを追加したいと思いました。

SQLMembershipProviderクラスは、

public virtual string GeneratePassword()

これはResetPasswordによって呼び出されます。したがって、単純に SQLMembershipProvider クラスを拡張して、独自のバージョンのGeneratePasswordを実装できます。

これを行うには、web.config のメンバーシップ プロバイダー エントリを更新して、新しいメンバーシップ プロバイダー クラスを使用する必要があることに注意してください。

<membership>
  <providers>
    <add type="My.Namespace.MyCustomSqlMembershipProvider" ... />        
于 2011-02-16T01:09:11.850 に答える