Asp.net-core-identity-configuration

提供:Dev Guides
移動先:案内検索

ASP.NET Core-ID設定

この章では、Identityフレームワークをインストールして構成しますが、これには少しの作業が必要です。 Visual Studioに移動して新しいASP.NET Coreアプリケーションを作成し、個々のユーザーアカウントに認証を設定した完全なWebアプリケーションテンプレートを選択すると、その新しいプロジェクトにはセットアップされたIdentityフレームワークのすべての部分が含まれます。

ID設定

空のプロジェクトから始めました。 これからIdentityフレームワークをゼロからセットアップします。これは、完全なアプリケーションテンプレートに含まれるすべての要素について学ぶのに適した方法です。すべてのコードを詳細に処理していないと混乱する可能性があるためです。

開始するには、依存関係( Microsoft.AspNet.Identity )をインストールする必要があります。 Microsoft.AspNet.Identity.EntityFramework をインストールしてから、Entity Frameworkと連携するIdentityフレームワークを実装します。

  • Identity.EntityFrameworkに依存する場合、パッケージにはIdentityパッケージが含まれます。
  • 独自のデータストアを構築する場合は、Identityパッケージだけで作業できます。
  • 依存関係がインストールされると、ユーザーについて保存したいすべての情報を含むカスタマーUserクラスを作成できます。
  • このアプリケーションでは、Identityフレームワークによって提供されるクラスを継承します。このクラスは、Usernameプロパティやハッシュされたパスワードを保存する場所など、すべての重要な要素を提供します。

ASP.NET ID

  • また、 FirstAppDemoDbContext クラスを変更して、Identityフレームワークの IdentityDb クラスから継承する必要があります。
  • IdentityDbは、Entity Frameworkでユーザー情報として保存する必要があるすべてのものを提供します。 Userクラスと DBContext を設定したら、Startupクラスの ConfigureServices メソッドを使用して、アプリケーションにIdentityサービスを設定する必要があります。
  • MVCフレームワークをサポートするためにサービスを追加する必要があるときと同じように、Identityフレームワークが機能するためには、アプリケーションに追加されたサービスが必要です。
  • これらのサービスには、 UserStore サービスや SignInManager などのサービスが含まれます。
  • これらのサービスをコントローラーに注入して、ユーザーを作成し、適切なタイミングでCookieを発行します。
  • 最後に、スタートアップのConfigureメソッド中に、Identityミドルウェアを追加する必要があります。
  • このミドルウェアは、CookieをユーザーIDに変換するのに役立つだけでなく、ユーザーに401応答のある空のページが表示されないようにします。

以下の手順に従ってください。

  • ステップ1 *-Identityフレームワークへの依存関係を追加して先に進む必要があります。 Microsoft.AspNet.Identity.EntityFramework依存関係をproject.jsonファイルに追加しましょう。 これには、必要な他のすべてのIdentityパッケージが含まれます。
{
   "version": "1.0.0-*",
   "compilationOptions": {
      "emitEntryPoint": true
   },

   "dependencies": {
      "Microsoft.AspNet.Mvc":  "6.0.0-rc1-final",
      "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
      "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
      "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
      "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
      "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
      "EntityFramework.Commands": "7.0.0-rc1-final",
      "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
      "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final"
   },

   "commands": {
      "web": "Microsoft.AspNet.Server.Kestrel",
      "ef": "EntityFramework.Commands"
   },

   "frameworks": {
      "dnx451": { },
      "dnxcore50": { }
   },

   "exclude": [
      "wwwroot",
      "node_modules"
   ],

   "publishExclude": [
      "**.user",
      "**.vspscc"
   ]
}
  • ステップ2 *-このファイルを保存します。 Visual Studioがパッケージを復元し、Userクラスを追加できるようになりました。 Modelsフォルダーを右クリックし、追加→クラスを選択して、Userクラスを追加しましょう。

コードとクラスのオプション

このクラスをUserと呼び、上のスクリーンショットのように[追加]ボタンをクリックします。 このクラスでは、ユーザーについて保存する情報を保持するプロパティを追加できます。

  • ステップ3 *-Identityフレームワークによって提供されるクラスからUserクラスを派生させましょう。 Identity.EntityFramework名前空間にあるのはIdentityUserクラスです。
using Microsoft.AspNet.Identity.EntityFramework;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace FirstAppDemo.Models {
   public class User : IdentityUser {
   }
}

ステップ4-IdentityUserに移動して、そのシンボルにカーソルを置き、F12を押してVisual Studioのメタデータビューを表示します。

#region Assembly Microsoft.AspNet.Identity.EntityFramework, Version = 3.0.0.0,

namespace Microsoft.AspNet.Identity.EntityFramework {
   public class IdentityUser : IdentityUser<string> {
      public IdentityUser();
      public IdentityUser(string userName);
   }
}
  • ステップ5 *-IdentityUserは文字列のIdentityUserから派生していることがわかります。 IdentityUserから派生し、ジェネリック型パラメーターを指定することにより、主キーの型を変更できます。 理想的には整数値である主キーを使用して物事を保存することもできます。
  • ステップ6 *-文字列のIdentityUserにカーソルを置き、もう一度F12を押してメタデータビューに移動します。

IDユーザー

これで、デフォルトでユーザーに関連するすべての情報を表示できます。 情報には次のものが含まれます-

  • このアプリケーションでは使用しませんが、使用可能なフィールド。
  • Identityフレームワークは、特定のユーザーのログイン試行の失敗回数を追跡し、そのアカウントを一定期間ロックすることができます。
  • PasswordHash、PhoneNumberを保存するフィールド。 使用する2つの重要なフィールドは、PasswordHashとUserNameです。
  • また、ユーザーの主キーとIDプロパティを暗黙的に使用します。 特定のユーザーを照会する必要がある場合にも、そのプロパティを使用できます。

ステップ7 *-次に、ユーザーがDBContextに含まれていることを確認する必要があります。 そのため、アプリケーションにある *FirstAppDemoDBContext を開き、組み込みのEntity FrameworkベースクラスであるDBContextから直接派生する代わりに、IdentityDbContextから派生する必要があります。

using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Data.Entity;

namespace FirstAppDemo.Models {
   public class FirstAppDemoDbContext : IdentityDbContext<User> {
      public DbSet<Employee> Employees { get; set; }

      protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
         optionsBuilder.UseSqlServer("Data Source = (localdb)\\MSSQLLocalDB;
            Initial Catalog = FirstAppDemo;Integrated Security = True;
            Connect Timeout = 30;Encrypt = False;TrustServerCertificate = True;
            ApplicationIntent = ReadWrite;MultiSubnetFailover = False");
      }
   }
}
  • ステップ8 *-IdentityDbContextクラスもMicrosoft.AspNet.Identity.EntityFramework名前空間にあり、格納するユーザーの種類を指定できます。 このようにして、Userクラスに追加する追加フ​​ィールドはすべてデータベースに入ります。
  • IdentityDbContextは、ユーザーを保存するだけでなく、ユーザーロールとユーザー要求に関する情報も保存するために、追加のDbSetを提供します。
  • Userクラスの準備ができました。 FirstAppDemoDbContextクラスは、Identityフレームワークと連携するように構成されています。
  • これで、ConfigureおよびConfigureServicesに進み、Identityフレームワークをセットアップできます。

ステップ9 *- *ConfigureServices から始めましょう。 MVCサービスとEntity Frameworkサービスに加えて、IDサービスを追加する必要があります。 これにより、Identityフレームワークが作業を行うために依存するすべてのサービスが追加されます。

public void ConfigureServices(IServiceCollection services) {
   services.AddMvc();

   services.AddEntityFramework()
      .AddSqlServer()
      .AddDbContext<FirstAppDemoDbContext>
      (option => option.UseSqlServer(Configuration["database:connection"]));

   services.AddIdentity<User, IdentityRole>()
      .AddEntityFrameworkStores<FirstAppDemoDbContext>();
}
  • AddIdentityメソッドは、ユーザーエンティティのタイプとロールエンティティのタイプの2つの汎用タイプパラメータを取ります。
  • 2つのジェネリック型パラメーターは、ユーザーの型です。作成したばかりのUserクラスと、操作するRoleクラスです。 ここで、組み込みのIdentityRoleを使用します。 このクラスは、EntityFramework名前空間にあります。
  • IdentityでEntity Frameworkを使用している場合、AddEntityFrameworkStoresという2番目のメソッドも呼び出す必要があります。
  • AddEntityFrameworkStoresメソッドは、ユーザーの作成とパスワードの検証に使用されるサービスであるUserStoreなどのサービスを構成します。
  • ステップ10 *-次の2行は、アプリケーションのサービスを構成するために必要なすべてです。
services.AddIdentity<User, IdentityRole>()
   .AddEntityFrameworkStores<FirstAppDemoDbContext>();
  • ステップ11 *-ミドルウェアも追加する必要があります。 ミドルウェアを挿入する場所は重要です。パイプラインの後半にミドルウェアを挿入すると、リクエストを処理する機会がなくなるためです。

また、MVCコントローラー内で承認チェックが必要な場合は、Cookieと401エラーが正常に処理されるように、MVCフレームワークの前にIdentityミドルウェアを挿入する必要があります。

public void Configure(IApplicationBuilder app) {
   app.UseIISPlatformHandler();

   app.UseDeveloperExceptionPage();
   app.UseRuntimeInfoPage();

   app.UseFileServer();

   app.UseIdentity();
   app.UseMvc(ConfigureRoute);

   app.Run(async (context) => {
      var msg = Configuration["message"];
      await context.Response.WriteAsync(msg);
   });
}
  • ステップ12 *-ミドルウェアを挿入する場所は、IDミドルウェアを追加する場所です。 以下は、Startup.csファイルの完全な実装です。
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

using FirstAppDemo.Services;
using Microsoft.AspNet.Routing;
using System;

using FirstAppDemo.Entities;
using Microsoft.Data.Entity;

using FirstAppDemo.Models;
using Microsoft.AspNet.Identity.EntityFramework;

namespace FirstAppDemo {
   public class Startup {
      public Startup() {
         var builder = new ConfigurationBuilder()
            .AddJsonFile("AppSettings.json");
         Configuration = builder.Build();
      }
      public IConfiguration Configuration { get; set; }

     //This method gets called by the runtime.
     //Use this method to add services to the container.
     //For more information on how to configure your application,
     //visit http://go.microsoft.com/fwlink/?LinkID = 398940
      public void ConfigureServices(IServiceCollection services) {
         services.AddMvc();
            services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<FirstAppDemoDbContext>(option =>
            option.UseSqlServer(Configuration["database:connection"]));

         services.AddIdentity<User, IdentityRole>()
            .AddEntityFrameworkStores<FirstAppDemoDbContext>();
      }
     //This method gets called by the runtime.
     //Use this method to configure the HTTP request pipeline.
      public void Configure(IApplicationBuilder app) {
         app.UseIISPlatformHandler();
         app.UseDeveloperExceptionPage();
         app.UseRuntimeInfoPage();
         app.UseFileServer();
         app.UseIdentity();
         app.UseMvc(ConfigureRoute);

         app.Run(async (context) => {
            var msg = Configuration["message"];
            await context.Response.WriteAsync(msg);
         });
      }
      private void ConfigureRoute(IRouteBuilder routeBuilder) {
        //Home/Index
         routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}/{id?}");
      }
     //Entry point for the application.
      public static void Main(string[] args) => WebApplication.Run<Startup>(args);
   }
}
  • ステップ13 *-アプリケーションを作成して先に進みましょう。 次の章では、別のEntity Framework移行を追加して、SQL ServerデータベースにIdentityスキーマがあることを確認する必要があります。