Migrar a Autenticação e a Identity para o ASP.NET Core 2.0
Por Steve Smith
No artigo anterior, migramos a configuração de um projeto de MVC do ASP.NET para o MVC do ASP.NET Core. Neste artigo, migramos os recursos de registro, login e gerenciamento de usuários.
Configurar a Identity e a Filiação
No MVC do ASP.NET, os recursos de autenticação e identity são configurados usando a Identity do ASP.NET em Startup.Auth.cs
e IdentityConfig.cs
, localizados na pasta App_Start. No MVC do ASP.NET Core, esses recursos são configurados no Startup.cs
.
Instale os seguintes pacotes NuGet:
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Authentication.Cookies
Microsoft.EntityFrameworkCore.SqlServer
Aviso
Este artigo mostra o uso de cadeias de conexão. Com um banco de dados local, o usuário não precisa ser autenticado, mas na produção, as cadeias de conexão às vezes incluem uma senha para autenticação. Uma credencial de senha do proprietário do recurso (ROPC) é um risco de segurança que deve ser evitado em bancos de dados de produção. Os aplicativos de produção devem usar o fluxo de autenticação mais seguro disponível. Para obter mais informações sobre autenticação para aplicativos implantados em ambientes de teste ou produção, consulte Fluxos de autenticação seguros.
No Startup.cs
, atualize o método de Startup.ConfigureServices
para usar a Entity Framework e os serviços de Identity:
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();
}
Nesta altura, temos dois tipos mencionados no código acima que ainda não migramos do projeto de MVC do ASP.NET: ApplicationDbContext
e ApplicationUser
. Crie uma nova pasta Modelos no projeto do ASP.NET Core e adicione duas classes correspondentes a esses tipos. Você poderá encontrar as versões de MVC do ASP.NET para essas classes em /Models/IdentityModels.cs
, mas usaremos um arquivo por classe no projeto migrado, porque fica mais claro.
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);
}
}
}
O projeto MVC Starter do ASP.NET Core para Web não inclui muita personalização de usuários nem o ApplicationDbContext
. Ao migrar um aplicativo real, você também precisa migrar todas as propriedades e métodos personalizados do seu usuário e as classes de DbContext
do seu aplicativo, além de quaisquer outras classes de Modelo que seu aplicativo utilizar. Por exemplo, se o seu DbContext
tiver um DbSet<Album>
, você precisará migrar a classe Album
.
Com esses arquivos no lugar, o arquivo Startup.cs
pode ser configurado para compilar quando você atualiza as respectivas instruções using
:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
Nosso aplicativo agora está pronto para dar suporte à autenticação e aos serviços de Identity. Você só precisa expor esses recursos aos usuários.
Migrar o registro e a lógica de login
Com os serviços de Identity configurados para o aplicativo e o acesso aos dados configurado usando o Entity Framework e o SQL Server, estamos prontos para adicionar ao aplicativo o suporte ao registro e ao login. Lembre-se de que, no início do processo de migração, comentamos uma referência ao _LoginPartial no _Layout.cshtml
. Agora, chegou a hora de retornarmos a esse código, remover a marca de comentário e adicionar os controladores e modos de exibição necessários para dar suporte à funcionalidade de login.
Remover a marca de comentário com a linha @Html.Partial
no _Layout.cshtml
:
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@*@Html.Partial("_LoginPartial")*@
</div>
</div>
Agora, adicione um novo modo de exibição do Razor chamado _LoginPartial à pasta Modos de Exibição/Compartilhados :
Atualize o _LoginPartial.cshtml
com o código a seguir (substitua todo o conteúdo):
@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>
}
Nesta altura, você deve ser capaz de atualizar a página do site no seu navegador.
Resumo
ASP.NET Core introduz alterações nos recursos de Identity do ASP.NET. Neste artigo, você viu como migrar os recursos de autenticação e gerenciamento de usuários da Identity do ASP.NET para o ASP.NET Core.