Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ASP.NET Core 2.x Identityについて

https://fukuten.connpass.com/event/111501/

  • Login to see the comments

ASP.NET Core 2.x Identityについて

  1. 1. ASP.NET Core 2.x Identityについて 2018/12/15 Fukuoka.NET #11 @tsubakimoto_s
  2. 2. 松村優大 (まつむらゆうた) 株式会社オルターブース 業務執行役員/CTA C#/PHP/Azure/AWS 31歳/島根出身/娘1人
  3. 3. ASP.NET Core Identityによる認証と認可 Authentication & Authorization
  4. 4. 用語として • 認証:あなたは誰? 1. WHAT YOU ARE (inherence factor) 2. WHAT YOU HAVE (possession factor) 3. WHAT YOU KNOW (knowledge factor) • 認可:あなたに権限を与える • ○○な条件なら✕✕の権限がある https://dev.classmethod.jp/security/authentication-and-authorization/
  5. 5. ASP.NET Coreでは • 認証:どうやってログインするか? • 個人のユーザーアカウント (Individual) • Active Directory Federation Service (ADFS) • Open ID • 認可:アクションの実行権限があるか? • Role, Claim, Policy
  6. 6. Versions, Supports Version Level Release Date End of Support 1.0 Maintenance 2016/06/27 2019/06/27 1.1 Maintenance 2016/11/16 2019/06/27 2.0 EOL 2017/08/14 2018/10/01 2.1 LTS 2018/05/30 At least three years from August 21, 2018 2.2 Current 2018/12/04 - ※LTS : Long Term Support ※Current : 新機能を含むが将来的な変更の可能性あり。継続的なアップデートが必要。 ※Maintenance : かつてのLTSであり、次期LTSリリース後12ヶ月間はサポートされる。
  7. 7. ASP.NET Core Identity • ASP.NET Coreに認証と認可(とそれらに必要なユー ザーデータの管理)を追加する機能 • https://github.com/aspnet/Identity • NuGet: Microsoft.AspNetCore.Identity • 以下のパッケージには含まれている Microsoft.AspNetCore.App ←推奨 Microsoft.AspNetCore.All
  8. 8. アプリに認証を組み込む
  9. 9. プロジェクトテンプレートから
  10. 10. データベース # テーブル名 役割 1 AspNetUsers ユーザーを管理する(必須) 2 AspNetRoles ロールを管理する 3 AspNetUserRoles ユーザーとロールの関連を管理する 4 AspNetUserClaims ユーザーが所有するクレームを管理する 5 AspNetUserLogins 外部の認証プロバイダーでのログインを管理する 6 AspNetUserTokens ユーザーの認証トークンを管理する 7 AspNetRoleClaims ロール内のすべてのユーザーに付与されるクレームを管理する
  11. 11. データベース # テーブル名 主キー 主キーの型 1 AspNetUsers Id string[450] 2 AspNetRoles Id string[450] 3 AspNetUserRoles UserId, RoleId string[450], string[450] 4 AspNetUserClaims 略 略 5 AspNetUserLogins 略 略 6 AspNetUserTokens 略 略 7 AspNetRoleClaims 略 略 ※stringだけど値としては実質GUIDとなる
  12. 12. Modelはどうなるか • ユーザー IdentityUser : IdentityUser<string> • ロール IdentityRole : IdentityRole<string> • DBコンテキスト MyDbContext : IdentityDbContext<IdentityUser> 主キーの型 =主キーはstring
  13. 13. その他のModel • IdentityUserClaim<string> • IdentityUserToken<string> • IdentityUserLogin<string> • IdentityRoleClaim<string> • IdentityUserRole<string> 当然ながら全ての 主キーはstringである
  14. 14. 主キーを別の型に変更する https://docs.microsoft.com/ja-jp/aspnet/core/security/authentication/customize- identity-model
  15. 15. 最小手順 DBコンテキストの基底に型を指定する class MyDbContext : IdentityDbContext<IdentityUser<Guid>, IdentityRole<Guid>, Guid>
  16. 16. 主キー型を変えつつユーザーを拡張する class ApplicationUser : IdentityUser<Guid> ↓ class MyDbContext : IdentityDbContext<ApplicationUser, IdentityRole<Guid>, Guid>
  17. 17. 必要があればロールクラスも拡張する class ApplicationRole : IdentityRole<Guid> ↓ class MyDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
  18. 18. Startup.csにカスタマイズを登録する services.AddIdentity<ApplicationUser, ApplicationRole>() .AddEntityFrameworkStores<MyDbContext>() .AddDefaultUI() .AddDefaultTokenProviders();
  19. 19. 認証機能のUI ASP.NET Core 2.1で様変わりしたUI実装
  20. 20. IdentityDefaultUIApp |--Areas | |--Identity | | |--Data | | | |--IdentityDefaultUIAppIdentityDbContext.cs | | |--IdentityHostingStartup.cs | | |--Pages | | | |--_ValidationScriptsPartial.cshtml | | | |--_ViewStart.cshtml | | |--Services |--Controllers |--Migrations |--Models |--Program.cs |--Startup.cs |--Views 認証機能のエリアが切られる https://localhost:44393/Identity/Account/Login
  21. 21. IdentityDefaultUIApp |--Areas | |--Identity | | |--Data | | | |--IdentityDefaultUIAppIdentityDbContext.cs | | |--IdentityHostingStartup.cs | | |--Pages | | | |--_ValidationScriptsPartial.cshtml | | | |--_ViewStart.cshtml | | |--Services |--Controllers |--Migrations |--Models |--Program.cs |--Startup.cs |--Views 認証機能のエリアが切られる https://localhost:44393/Identity/Account/Login
  22. 22. IdentityHostingStartup.cs [assembly: HostingStartup(typeof(IdentityDefaultUIApp.Areas.Identity.IdentityHostingStartup))] namespace IdentityDefaultUIApp.Areas.Identity { public class IdentityHostingStartup : IHostingStartup { public void Configure(IWebHostBuilder builder) { builder.ConfigureServices((context, services) => { services.AddDbContext<MyDbContext>(options => options.UseSqlServer( context.Configuration.GetConnectionString(“ConnectionString"))); services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<MyDbContext>(); }); 従来のStartup.csとは別ファイル “HostingStartup”で識別される ※統合しても問題ない DbContextも別ファイルになるが 統合しても問題ない
  23. 23. デフォルトUIの登場 services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<MyDbContext>(); or services.AddIdentity<IdentityUser, IdentityRole>() .AddDefaultUI() .AddEntityFrameworkStores<MyDbContext>(); Identityをカスタマイズしない場合 Identityをカスタマイズする場合
  24. 24. 独自の認証UIを作る場合 dotnet CLIの出番
  25. 25. CLIでIdentityをスキャフォールディング Area/Identity/Pages 配下にViewを作成する UIはRazor Pagesで実装する必要がある(面倒) dotnet aspnet-codegenerator identity -dc MyApp.Data.MyDbContext --force https://docs.microsoft.com/ja-jp/aspnet/core/security/authentication/scaffold-identity https://github.com/tsubakimoto/aspnetcore-mokumoku-identity/commit/fd19acdf78bff9ca731d556ca5ef791126138bc8
  26. 26. Razor Pagesとは UIと機能がセットになっているページ構成 Login.cshtml … UI Login.cshtml.cs … 機能 ※コードビハインドとも言う
  27. 27. 画面にバインドするクラス (使い方はMVCと同じくRazor構文) HTTP Getでのアクション (OnGet or OnGetAsync) HTTP Postでのアクション (OnPost or OnPostAsync)
  28. 28. ここまでは ASP.NET Core 2.1の話
  29. 29. ここからは ASP.NET Core 2.2の話
  30. 30. デフォルトUI services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<MyDbContext>(); or services.AddIdentity<IdentityUser, IdentityRole>() .AddDefaultUI(UIFramework.Bootstrap4) .AddEntityFrameworkStores<MyDbContext>(); Identityをカスタマイズしない場合 Identityをカスタマイズする場合 ※Bootstrap 3 or 4を選ぶようになった
  31. 31. Bootstrap v3 Bootstrap v4

×