ASP.NET Identityを使い始める

多くの皆さんは、ASP.NET MVC 5のリリースが、ASP.NET Identityと呼ばれる新しい承認システムへの移行によってマークされたことを知っている必要があります。 フレームワークの開発者は、新しいシステムに切り替えることを強くお勧めします。その主な利点は、絶対にあらゆるプロジェクト(ASP.NET MVC、Webフォーム、Webページ、Web API、SignalR)での実装の可能性、シンプルなソーシャル統合、OWINでの作業、NuGetを介したインストールと更新ですその他。 ASP.NET Identityを詳しく見ると、これはASP.NETでのWebプログラミング開発の次のステップであると、良心のtwinりもなく言うことができます。 この投稿では、ASP.NET Identityを使い始めるための簡単なチュートリアルを投稿します。



MVC 5プロジェクトで承認システムを実装するための手頃な価格のチュートリアルを探してインターネットを少し歩き回った後、特定の数の主題記事を見つけましたが、それらのほとんどすべてがユーザーデータのリポジトリとしてEntity Frameworkの使用に焦点を当てていました。 ルートリソースでさえ、私の大きな不満に対して、トピックを適切に明らかにできず、関心のあるすべての質問に答えることができませんでした。



最新のテクノロジー、特にOwin、Katana、そしてもちろんASP.NET Identityを使用したいMVCプロジェクトを考えてみましょう。 突然Owinという用語があなたを混乱させる場合は、 記事を読むことをお勧めします



1.必要なメインライブラリ :Microsoft.AspNet.Identity.Core、Microsoft.Owin、Microsoft.Owin.Security +それらに依存し、それらに依存するすべてのもの。 NuGet Package Managerを使用して簡単にインストールできます。 NuGetコンソールを介して、これは次のように実行できます。



Install-Package Microsoft.AspNet.Identity.Core
      
      







2.メインクラスを実現します。

 public class ApplicationUser : IUser { public ApplicationUser(string name) { Id = Guid.NewGuid().ToString(); UserName = name; } public string Id { get; private set; } public string UserName { get; set; } }
      
      





Microsoft.AspNet.Identityインターフェイス IUserには、IdおよびUserNameフィールドの実装が必要です。 さらに、必要なフィールド(メール、パスワード、市など)を追加できます。



 public class CustomUserStore : IUserStore<ApplicationUser> { static readonly List<ApplicationUser> Users = new List<ApplicationUser>(); public void Dispose() { throw new NotImplementedException(); } public Task CreateAsync(ApplicationUser user) { return Task.Factory.StartNew(() => Users.Add(user)); } public Task UpdateAsync(ApplicationUser user) { throw new NotImplementedException(); } public Task DeleteAsync(ApplicationUser user) { throw new NotImplementedException(); } public Task<ApplicationUser> FindByIdAsync(string userId) { throw new NotImplementedException(); } public Task<ApplicationUser> FindByNameAsync(string userName) { return Task<ApplicationUser>.Factory.StartNew(() => Users.FirstOrDefault(u => u.UserName == userName)); } }
      
      





CustomUserStoreは、その名前が示すとおり、ユーザーリポジトリであり、それらを操作するための基本的なメソッド(作成、更新、削除)が含まれています。 ここでは、ストレージに静的フィールドUsersを使用します。 ここで、適切なストレージをねじ込むことができます。 また、戻り値のタイプ-タスクとタスクを無視することはできません。 これは、メソッドが非同期に実行されることを意味します。 このトピックについては、ハブに適切な資料があります(たとえば、 こちら )。



 public class CustomUserManager : UserManager<ApplicationUser> { public CustomUserManager(CustomUserStore store) : base(store) { this.PasswordHasher = new CustomPasswordHasher(); } public override Task<ApplicationUser> FindAsync(string userName, string password) { Task<ApplicationUser> taskInvoke = Task<ApplicationUser>.Factory.StartNew(() => { PasswordVerificationResult result = this.PasswordHasher.VerifyHashedPassword(userName, password); if (result == PasswordVerificationResult.SuccessRehashNeeded) { return Store.FindByNameAsync(userName).Result; } return null; }); return taskInvoke; } } public class CustomPasswordHasher : PasswordHasher { public override string HashPassword(string password) { return base.HashPassword(password); } public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword) { if (true) { return PasswordVerificationResult.SuccessRehashNeeded; } else { return PasswordVerificationResult.Failed; } } }
      
      





CustomUserManagerはメインクラスで、ユーザーデータを操作するために呼び出すメソッドです(古いメンバーシッププロバイダーを置き換えます)。 Microsoft.AspNet.Identityの後継である必要があります。 多くの仮想メソッドを含むUserManager 。 この場合、FindAsync()メソッドを再定義しました。たとえば、最初にパスワードがチェックされ、成功した場合はユーザーが返されます。 ご覧のとおり、UserManegerコンストラクターで、パスワードを管理するためのクラスである独自のPasswordHasherを定義しました。 VerifyHashedPasswordメソッドの本体にはデモビューがあります。 そこにパスワード検証ロジックを書くことができます。



3. CustomUserManagerと連携するようにアプリケーションを構成します。 これを行うには、アプリケーションの起動時にOwinアセンブリによって実行されるStartup.csファイルに次の行を追加します。



  app.CreatePerOwinContext(CustomUserManager.Create);
      
      







4.コントローラー内でCustomUserManagerを使用します。



 public class TestController : ApiController { private static CustomUserManager _customUserManager; public CustomUserManager UserManager { get { return _customUserManager ?? (_customUserManager = HttpContext.Current.GetOwinContext().GetUserManager<CustomUserManager>()); } } public async Task<bool> Authenticate(string name, string password) { if (await UserManager.FindAsync(name, password) != null) { return true; } return false; } }
      
      





オーバーライドしたUserManagerメソッドと、CustomUserStoreクラスのメソッドの標準セット(同じ名前のUserManagerのメソッドを使用するとデフォルトで呼び出されます)を使用できます。これらは必ず定義する必要があります。



5.標準のMVC [Authorize]属性を使用するには、Startupクラスで必要な承認のタイプを設定します 。 例:

 public class Startup { public void Configuration(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login") }); } }
      
      







使用されるリソースのリスト:

-Entity Frameworkを使用しないシンプルなAsp.net Identity Core

-ASP.NET Identity 2.0 Cookieおよびトークン認証



PSこの資料はデビューであり、もちろん、ASP.NET Identityの網羅的なマニュアルであるとは主張していません。 MVCテクノロジーに精通し、新しい認証システムに精通したい人向けに設計されています。



All Articles