Megosztás a következőn keresztül:


Hitelesítés és Identity migrálása a ASP.NET Core-ba

Készítette: Steve Smith

Az előző cikkben migrált konfigurációt egy ASP.NET MVC-projektből ASP.NET Core MVC. Ebben a cikkben migráljuk a regisztrációs, bejelentkezési és felhasználókezelési funkciókat.

Identity és tagság konfigurálása

ASP.NET MVC-ben a hitelesítési és identitásfunkciók a Startup.Auth.cs és IdentityConfig.csASP.NET Identity használatával vannak konfigurálva, amely a App_Start mappában található. A ASP.NET Core MVC-ben ezek a funkciók Startup.cskonfigurálva vannak.

Telepítse a következő NuGet-csomagokat:

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.AspNetCore.Authentication.Cookies
  • Microsoft.EntityFrameworkCore.SqlServer

Figyelmeztetés

Ez a cikk a kapcsolati sztringek használatát mutatja be. Helyi adatbázis esetén a felhasználót nem kell hitelesíteni, de éles környezetben a kapcsolati sztringek néha tartalmaznak jelszót a hitelesítéshez. Az erőforrás-tulajdonosi jelszóval történő hitelesítés (ROPC) olyan biztonsági kockázatot jelent, amelyet el kell kerülni a termelési adatbázisokban. A gyártási alkalmazásoknak az elérhető legbiztonságosabb hitelesítési folyamatot kell használniuk. A tesztelési vagy éles környezetekben üzembe helyezett alkalmazások hitelesítéséről további információt a Biztonságos hitelesítési folyamatokcímű témakörben talál.

A Startup.csfrissítse a Startup.ConfigureServices metódust az Entity Framework és Identity szolgáltatások használatára:

public void ConfigureServices(IServiceCollection services)
{
    // Add EF services to the services container.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

     services.AddMvc();
}

A fenti kódban jelenleg két típusra hivatkozunk, amelyeket még nem migráltunk a ASP.NET MVC-projektből: ApplicationDbContext és ApplicationUser. Hozzon létre egy új Modellek mappát a ASP.NET Core projektben, és adjon hozzá két osztályt az ilyen típusúaknak megfelelően. Ezen osztályok ASP.NET MVC-verzióit a /Models/IdentityModels.cstalálja, de osztályonként egy fájlt fogunk használni az áttelepített projektben, mivel ez egyértelműbb.

ApplicationUser.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

namespace NewMvcProject.Models
{
    public class ApplicationUser : IdentityUser
    {
    }
}

ApplicationDbContext.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Data.Entity;

namespace NewMvcProject.Models
{
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Core Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Core Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }
    }
}

A ASP.NET Core MVC Starter Web-projekt nem tartalmazza a felhasználók vagy a ApplicationDbContexttestreszabását. Valós alkalmazás áttelepítésekor az alkalmazás felhasználói és DbContext osztályainak összes egyéni tulajdonságát és metódusát, valamint az alkalmazás által használt egyéb modellosztályokat is át kell telepítenie. Ha például a DbContext rendelkezik DbSet<Album>, át kell telepítenie a Album osztályt.

Ha ezek a fájlok a helyükön vannak, a Startup.cs fájl a using utasításainak frissítésével fordítható le.

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

Az alkalmazás mostantól támogatja a hitelesítést és Identity szolgáltatásokat. Csak ezeket a funkciókat kell a felhasználók számára elérhetővé tenni.

Regisztrációs és bejelentkezési logika migrálása

Az Entity Framework és az SQL Server használatával konfigurált alkalmazáshoz és adathozzáféréshez konfigurált Identity szolgáltatásokkal készen állunk arra, hogy támogatást nyújtsunk a regisztrációhoz és az alkalmazásba való bejelentkezéshez. Ne feledje, hogy a migrálási folyamat korábbi a _Layout.cshtml_LoginPartial hivatkozását fűztük hozzá. Most már itt az ideje, hogy visszatérjen a kódhoz, törölje a megjegyzéseket, és hozzáadja a szükséges vezérlőket és nézeteket a bejelentkezési funkciók támogatásához.

Az _Layout.cshtmlfájlban törölje az @Html.Partial elől a megjegyzés jelet:

      <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    </ul>
    @*@Html.Partial("_LoginPartial")*@
  </div>
</div>

Most vegyen fel egy _LoginPartial nevű új Razor nézetet a Nézetek/Megosztott mappába:

Frissítse _LoginPartial.cshtml a következő kóddal (cserélje le az összes tartalmát):

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
            </li>
        </ul>
    </form>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
        <li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
    </ul>
}

Ezen a ponton frissítenie kell a webhelyet a böngészőben.

Összefoglalás

ASP.NET Core a ASP.NET Identity funkcióinak változásait mutatja be. Ebben a cikkben megismerhette, hogyan migrálhatja a ASP.NET Identity hitelesítési és felhasználókezelési funkcióit ASP.NET Core-ba.