2017-03-14 11 views
2

私はIdentityServer4とASP.NET Identityを使用しており、パスワードの有効期限の検証を追加できるようにカスタムパスワード検証を行いたいと考えています(ifパスワードは90日以上経過した後、パスワードなどを変更します)。IdentityServer4とASP.NETでカスタムパスワード検証を使用する方法

Startup.csのConfigureServices()メソッドでservices.AddIdentityを設定すると、.AddPasswordValidator<>の方法で実行されましたが、実装方法に関する明確なドキュメントが見つかりません。

誰でも実装の手助けをすることができますか、私に何か類似のコード例を指摘できますか? (あるいは、IdentityServer4でユーザー/パスワードのカスタム検証をどこで/実装できるかを理解するのに役立つでしょうか?

答えて

5

私は、パスワードのバリデータは何が必要だと思いますが、あなたが求めてきました以来ません -
カスタムパスワードバリ(ない私のコードは、以下の記事へのリンク)の例:

public class SameCharacterPasswordValidator<TUser>: IPasswordValidator<TUser> 
     where TUser : class 
{ 
    public Task<IdentityResult> ValidateAsync(UserManager<TUser> manager, 
               TUser user, 
               string password) 
    { 
     return Task.FromResult(password.Distinct().Count() == 1 ? 
      IdentityResult.Failed(new IdentityError 
      { 
       Code = "SameChar", 
       Description = "Passwords cannot be all the same character." 
      }) : 
      IdentityResult.Success); 
    } 
} 

あなたのカスタムバリデータはConfigureServices方法

services.AddIdentity<ApplicationUser, IdentityRole>(options => 
{ 
    // Basic built in validations 
    options.Password.RequireDigit = true; 
    options.Password.RequireLowercase = true; 
    options.Password.RequireNonLetterOrDigit = true; 
    options.Password.RequireUppercase = true; 
    options.Password.RequiredLength = 6; 
}) 
    .AddEntityFrameworkStores<ApplicationDbContext>() 
    .AddDefaultTokenProviders() 
    // Your custom validator here 
    .AddPasswordValidator<SameCharacterPasswordValidator<ApplicationUser>>(); 

以内に適用することができますここではASP.NETのアイデンティティのパスワードのバリデータについての良い記事です: https://elanderson.net/2016/03/asp-net-core-password-options-and-custom-validators/

パスワードバリデータは、パスワードが(正規表現のような)形式であることを確認するためのものです。したがって、パスワードの有効期限はそれとは関係ありません。これはパスワードのメタデータですが、パスワードの形式とは関係ありません。
この場合、AspNetUsersテーブルにフィールドを追加できます(IdentityUser(おそらくApplicationUserと呼ばれる)から継承しているクラスをPasswordChangedAtの日付フィールドに拡張することで可能になります。
その後、あなたがその検証のために自分自身を確認する必要がありますに

PS:それはそのパスワードの強度やユーザストアが実際にIdentityServerとは何の関係もないとしなければならない何かを実現することが重要です IdentityServerがあなたのSTSとして機能します(。セキュリティトークンサービス)
自分自身で実現するまでには時間がかかりました。私はそれがあなたには明らかかもしれないが、言及する価値があると思う。

+1

ご協力いただきありがとうございます。 私はあなたが正しいと思う、私はおそらく、パスワード検証を実行する代わりにAspNetUsersテーブルを拡張する必要があります。 IdentityServerの概念を完全に理解していなかったので、IdentityServerについての理解を深めていただきありがとうございます。もう一度ありがとう、私はあなたのすべての助けに感謝します。 – CodingRiot

+0

確かに、私はこれが助けて嬉しいです:) – DotnetProg

関連する問題