Neste artigo eu vou mostrar como implementar a autenticação via cookie em uma aplicação ASP .NET Core usando a ADO .NET. |
Quando você cria uma aplicação ASP .NET Core MVC usando o template Web Application(Model-View-Controller) com autenticação através da opção Individual User Accounts, o projeto criado possui toda a estrutura para realizar a autenticação e o registro do usuário.
A ASP.NET
Core fornece várias maneiras de implementar a autenticação em uma aplicação.
Neste artigo vou focar na autenticação via cookie.
Vou criar uma aplicação ASP .NET Core MVC onde iremos implementra o registro e o
login de novos usuários. A persistência das informações será feita em um banco
de dados SQL Server 2012 usando os recursos da ADO .NET.
O objetivo é mostrar mais uma alternativa de implementação da segurança usando ASP .NET Core.
Vou usar a abordagem database-first onde iremos criar o banco de dados Estudo.mdf e a tabela Usuario com a seguinte estrutura:
CREATE TABLE Usuarios
(
Id [int] IDENTITY(1,1) NOT NULL,
Login [nvarchar](100) NOT NULL,
Senha [nvarchar](100) NOT NULL,
Nome [nvarchar](100) NOT NULL,
Email [nvarchar](150) NOT NULL
)
|
A seguir vamos criar as seguintes stored procedures:
1- Para registrar um usuário
CREATE PROCEDURE RegistrarUsuario
(
@Login VARCHAR(100),
@Senha VARCHAR(100) ,
@Nome VARCHAR(100) ,
@Email VARCHAR(100)
)
AS
BEGIN
DECLARE @resultado VARCHAR(10) ='Falhou'
IF NOT EXISTS(SELECT 1 FROM Usuarios where Login=@Login)
BEGIN
INSERT INTO Usuarios
VALUES
(
@Login,@Senha,@Nome,@Email
)
SET @resultado= 'Sucesso'
END
SELECT @resultado AS Resultado
END
|
2- Para validar o login do usuário
CREATE PROCEDURE ValidarLogin
(
@Login VARCHAR(100) ,
@Senha VARCHAR(100)
)
AS
BEGIN
DECLARE @autenticacao VARCHAR(10)='Falhou'
IF EXISTS(SELECT 1 FROM Usuarios WHERE Login=@Login AND Senha =@Senha)
BEGIN
SET @autenticacao='Sucesso'
END
SELECT @autenticacao AS EstaAutenticado
END
|
O resultado final obtido no SQL Server pode ser visto na figura abaixo:
Recursos usados:
Criando o projeto no VS 2017
Abra o VS 2017 Community e crie um novo projeto ASP .NET Core usando o template Empty.
Confirme as opções clicando em OK para criar o projeto.
Vou iniciar definindo a
string de conexão no appsettings.json :
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=.\MACORATTI;Initial Catalog=Estudo;Integrated Security=True"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
|
Nota: Você pode usar qualquer outro nome da sua escolha.
Definindo o modelo de domínio e a classe de acesso aos dados
Vamos criar na pasta Models do projeto as classes Usuario que representa um usuário e a classe Autenticacao que vamos usar para registrar e validar o login do usuário.
1- Classe Usuario
Nesta classe
definimos as propriedades do usuário:
using System.ComponentModel.DataAnnotations;
namespace AspCore_AutenticaCookie.Models [Required] [Required] [Required] |
2- Classe de acesso aos dados
Para definir a lógica de acesso aos dados vamos definir a interface IAutenticacao e a classe Autenticacao que implementa esta interface. Dessa forma poderemos registrar o serviço para poder usar a injeção de dependência no construtor do controlador LoginController que iremos criar mais adiante.
a-
Definindo a interface IAutenticacao
public interface IAutenticacao
{
string GetConnectionString();
string RegistrarUsuario(Usuario usuario);
string ValidarLogin(Usuario usuario);
}
|
b-
Implementando a interface IAutenticacao na classe
Autenticacao
A classe Autenticacao
implementa a interface;
nesta classe temos
os métodos para registrar um usuário e validar o login
do usuário.
O código permite
ler a string de conexão definida no arquivo
appsettings.json e acessar
as tabelas do banco de dados usando ADO .NET :
using Microsoft.Extensions.Configuration; using System.Data; using System.Data.SqlClient; using System.IO;
namespace AspCore_AutenticaCookie.Models //Le a string de conexão do arquivo de configuração Configuration = builder.Build(); public string RegistrarUsuario(Usuario usuario) cmd.Parameters.AddWithValue("@Login", usuario.Login); con.Open(); return resultado; public string ValidarLogin(Usuario usuario) cmd.Parameters.AddWithValue("@Login", usuario.Login); con.Open(); return resultado; |
Configurando a autenticação via cookies e registrando o serviço
Vamos agora registrar o serviço e definir a autenticação via cookies no arquivo Startup.cs do projeto incluindo o código em azul destacado conforme abaixo:
using AspCore_AutenticaCookie.Models; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection;
namespace AspCore_AutenticaCookie public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) }); services.AddMvc(); // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. if (env.IsDevelopment()) app.UseStaticFiles(); app.UseMvc(routes => |
No método ConfigureServices, estamos fazendo o seguinte :
No método Configure estamos definindo o uso da autenticação e definindo um mapeamento para o controlador Login e a action LoginUsuario.
Criando os controllers LoginController e UsuarioController
Vamos incluir o
controlador LoginController na pasta
Controllers com seguinte código:
using AspCore_AutenticaCookie.Models; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Security.Claims; using System.Threading.Tasks;
namespace AspCore_AutenticaCookie.Controllers
public LoginController(IAutenticacao autentica) [HttpGet] [HttpPost] [HttpGet] [HttpPost] if (ModelState.IsValid) if (LoginStatus == "Sucesso") ClaimsIdentity userIdentity = new ClaimsIdentity(claims, "login"); await HttpContext.SignInAsync(principal); if (User.Identity.IsAuthenticated) |
Neste código após injetar uma instância da classe de acesso aos dados, Autenticacao, no construtor, temos os métodos:
Vamos agora incluir mais um controlador na pasta Controllers; o controlador UsuarioController que contém os métodos Actions:
Como não precisamos as propriedades Nome e Email para login estamos removendo os valores do nosso model usando o método ModelState.Remove.
O código é mostrado a seguir:
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks;
namespace AspCore_AutenticaCookie.Controllers [HttpGet] |
Na próxima parte do artigo vamos criar as respectivas Views e testar a autenticação usando cookies na nossa aplicação.
"Levantai os
vossos olhos para os céus, e olhai para a terra em
baixo, porque os céus desaparecerão como a fumaça, e a
terra se envelhecerá como roupa, e os seus moradores
morrerão semelhantemente; porém a minha salvação durará
para sempre, e a minha justiça não será abolida."
Isaías 51:6
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
ASP .NET Core - Criando uma aplicação com Angular 2 - Macoratti.net
ASP .NET Core - Criando uma aplicação Web no ... - Macoratti.net