ASP .NET Core - Usando o ASP .NET Core Identity - I
Neste artigo vou mostrar como usar ASP .NET Core Identity e a autenticação baseada em Claims e como implementá-la em uma aplicação ASP .NET Core 2.0. |
A ASP.NET Core Identity é o novo sistema de associação ou membership que acompnha o .NET Core e que usa o recurso da autenticação baseada em reivindicações ou claims. Ela inclui suporte a perfil, integração OAuth, trabalha com Owin, e está incluído com os modelos ASP.NET no Visual Studio 2017.
Dentre as características do ASP .NET Identity podemos destacar:
Customização do perfil do usuário simplificado (escrito em Code First(EF))
Controle de persistência de dados (Entity Framework, NHibernate, MySQL, MongoDB, etc)
Totalmente testável (Testes unitários)
Role Provider (separação de acessos por perfil)
Claims Based (baseado em declarações)
Autenticação com redes sociais (FaceBook, Twitter,etc.)
Integração com Active Directory
Integração com OWIN (Open Web Interface for .NET)
Entregue via NuGet
Open Source - Acompanhe no GitHub - https://github.com/aspnet/Identity
Antes de iniciar a exploração da ASP .NET Identity vamos comprender o que é a autenticação baseada em Claims ou declarações.
Autenticação baseda em Claims
Vamos
considerar um cenário em que uma pessoa chamada José, que é estudante
universitário, vai a um banco para abrir uma conta. O gerente do banco quer ver
algum tipo de documento que comprove a identidade de José, e, José apresenta a
sua carteira de motorista, que tem seu Nome, Data de
Nascimento e Endereço.
José também quer candidatar-se ao desconto que o banco oferece apenas aos
estudantes. O gerente novamente pede algum documento que comprove que José é um
estudante. Desta vez José apresenta sua carteira de estudante que tem o
nome, o nome da universidade, o nome do curso e o número
do estudante.
Este cenário da vida real pode ser usado como uma analogia para explicar a
autenticação baseada em declarações ou claims. Aqui José é o
Usuário que está usando a autenticação baseada em
Claims. Ele está usando duas identidades (um usuário pode ter várias
identidades) - carteira de motorista e carteira de estudante.
Assim uma identity ou identidade possui declarações anexadas a ela como : Nome, Data de nascimento, Número de Estudante, Curso, etc.
A implementação da ASP
.NET Core Identity
Na implementação atual da ASP.NET Core, um usuário é do tipo ClaimsPrincipal que implementa a interface IPrincipal. A classe ClaimsPrincipal é implementada no namespace System.Security.Claims.
Como a ASP .NET Core é open-source podemos espiar o código fonte da ASP .NET Identity no repositório GitHub : https://github.com/aspnet/identity
public class ClaimsPrincipal : IPrincipal
{
...........
...........
public virtual IIdentity Identity { get; }
public virtual IEnumerable<ClaimsIdentity> Identities { get; }
public virtual IEnumerable<Claim> Claims { get; }
...........
...........
public virtual bool HasClaim(Predicate<Claim> match);
public virtual bool HasClaim(string type, string value);
public virtual bool IsInRole(string role);
...........
...........
} |
Podemos
notar que a classe ClaimsPrincipal possui uma propriedade Identities
que retorna a coleção de ClaimsIdentity.
Isso significa que um Usuário pode ter múltiplas
identidades.
Existe outra propriedade Identity que retorna a identidade das claims
primárias associadas a esta claims principal.
Outra propriedade importante é
Claims que retorna uma coleção que contém
todas as claims de todas as identidades de claims associadas a esta claims
principal.
Vejamos agora o código da classe ClaimsIdentity :
public class ClaimsIdentity : IIdentity
{
...........
...........
public virtual string AuthenticationType { get; }
public virtual string Name { get; }
public virtual bool IsAuthenticated { get; }
public virtual IEnumerable<Claim> Claims { get; }
public virtual IEnumerable<Claim> FindAll(Predicate<Claim> match)
public virtual Claim FindFirst(string type);
public virtual bool HasClaim(string type, string value);
...........
...........
} |
A
propriedade AuthenticationType retorna o tipo que poderia ser algo como
Basic, Windows, Cookie, etc.
A propriedade Claims retorna a coleção de
claims associadas a essa
identidade.
Então, agora, se tentarmos mapear o exemplo do universitário José relacionando-o
com essas classes, podemos chegar a algo parecido com isso:
Interagindo com a ASP .NET Core Identity
A ASP.NET
Core Identity implementou algumas APIs (SignInManager,
UserManager, RoleManager, etc.) que simplifica as interações com os
objetos de identidade.
Ao trabalhar em um projeto ASP .NET Core a injeção de
dependência nativa vai fornecer os objetos para essas classes de forma
que possamos usá-las.
Por exemplo, a classe SignInManager implementa o seguinte método público
para se logar ou inscrever um usuário:
public virtual async Task SignInAsync(TUser user, AuthenticationProperties authenticationProperties,
string authenticationMethod = null)
{
var userPrincipal = await CreateUserPrincipalAsync(user);
if (authenticationMethod != null)
{
userPrincipal.Identities.First().AddClaim(new Claim(ClaimTypes.AuthenticationMethod,
authenticationMethod));
}
await Context.SignInAsync(IdentityConstants.ApplicationScheme, userPrincipal,authenticationProperties
?? new AuthenticationProperties());
} |
Esta foi apenas uma apresentação do recurso, no próximo artigo vamos iniciar a criação de um projeto ASP .NET Core vazio e incluir diferentes funcionalidades como Login, Logout, geração de Token, etc.
"Mas nós não recebemos
o espírito do mundo, mas o Espírito que provém de Deus, para que pudéssemos
conhecer o que nos é dado gratuitamente por Deus. "
1
Coríntios 2:12
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
ASP .NET 5 - Two-factor Authentication com SMS ... - Macoratti.net