しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET 4.5 で追加された MembershipPassword 属性について

System.Web.Security 名前空間に .NET Framework 4.5 で MembershipPassword 属性が追加されました。

この属性は ASP.NET MVC でメンバーシッププロバイダを使っている時にいい感じに検証してくれます。例えば membership の登録時にパスワードの最小長、記号を含むかどうか、その記号をいくつ含むか、そしてパスワードの強度を定義する正規表現を設定できます。

例えば、以下は ASP.NET Universal Provider を使う時の設定例です。

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider"
          type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          connectionStringName="DefaultConnection"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="false"
          requiresUniqueEmail="false"
          maxInvalidPasswordAttempts="5"
          minRequiredPasswordLength="6"
          minRequiredNonalphanumericCharacters="0"
          passwordStrengthRegularExpression=""
          passwordAttemptWindow="10"
          applicationName="/" />
  </providers>
</membership>

パスワードに関する設定は以下の 3 つのプロパティです。

  • minRequiredPasswordLength
    • パスワードの最小の長さ
  • minRequiredNonalphanumericCharacters
    • パスワードに含まれる最小の記号の数
  • passwordStrengthRegularExpression
    • パスワードの強度をテストするための正規表現

そして本題である MembershipPassword 属性は Web.config の設定を読み込んで、そのメンバーシップが必要とする検証を行ってくれる属性です。

ちなみに MembershipPassword 属性はプロパティでそれぞれの設定をオーバーライドすることも可能です。

public class RegisterModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [MembershipPassword(MinRequiredNonAlphanumericCharacters = 2)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
}

この例ではパスワード中に記号が 2 つ以上入っていることを要求します。

Web.config で設定した要件に合うように検証を自動的にしてくれるのは非常に便利ですね。パスワードの検証属性はこれで決まりな感じです。

そして MembershipPassword 属性を ASP.NET MVC で使う場合には、しっかりとクライアントサイド検証が動作します。ますます Phone 属性だけ動かないのが謎だ…。