Skip to content

Autenticação, Autorização e Claim. Tudo o que você precisa saber para utilizar Identity.

No artigo de hoje vou explicar os conceitos sobre Autenticação, Autorização e Claim. Também irei demostrar como podemos utilizar Claim para autorização.

Quando estamos falando de autenticação e autorização a bagunça em nossa cabeça se inicia e o caos se instaura. E além disso, qual a melhor forma de criar uma autorização de usuário?

A primeira coisa que temos que saber é:

  • Autenticação é o processo de saber quem você é.
  • Autorização é o processo de saber se o que você quer fazer pode ser feito.

Ficou mais simples agora, não? Vou dar exemplo.

Vamos aos processos de um sistema. Quando você vai acessar um site e para isso é necessário informar login e senha, significa que você precisa fazer uma autenticação para saber se seu usuário está na base desse site, ou seja, saber quem é você. Você é você mesmo?!

Você acessa o sistema e quando tenta acessar alguma parte, como relatório ou administrativo, e o sistema informa que você não tem permissão para aquilo, isso é chamado de autorização. Você tem usuário para acessar o sistema, mas não tem os privilégios necessários.

Fazer um sistema que cuide tanto de autenticação como de autorização é um pouco trabalhoso. Por isso, para quem trabalha com ASP.NET Core é recomendado a utilização do Identity.

Identity é uma feature do ASP.NET Core que facilita o processo para criação de contas de usuários, autenticação e os privilégios que este vai ter, autorização.

Utilizando Identity com Entity Framework fica mais lindo ainda, pois o identity irá utilizar da inteligência que o EF tem para acesso ao banco de dados.

E aonde entra o tal do Claim nessa história?

Calma, vou explicar. Primeiro entenda o que é um Claim

De forma resumida, um Claim é um atributo. Vou fazer analogia de um Claim com uma pessoa.

Toda pessoa tem não apenas um atributo, como muitos. Uma pessoa tem um nome, peso, uma altura, data de nascimento e vários outros. Isso seria os Claims de uma pessoa, ou seja, uma pessoa tem um conjunto de atributos.

Todo Claim tem também o emissor, ou seja, quem emitiu e certifica que aquele atributo existe. Na analogia com uma pessoa, quando eu falo que eu tenho uma altura e peso, o emissor desse conjunto de claim sou eu mesmo, por que isso é uma qualidade ou defeito meu.

Outro exemplo, quando você tira uma carteira de habilitação, essa carteira tem um conjunto de Claims: nome, RG, CPF, tipo de carteira e o seu emissor é o órgão que gerencia o trânsito. No caso do Brasil o Detran. Estão conseguindo entender?

Quando você faz uma integração com o Facebook e solicita os dados do usuário, você recebe um conjunto de Claims: nome, data de nascimento, e-mail e entre outros, o emissor desses atributos, ou seja, quem emitiu, é o Facebook.

Mas como usar isso no ASP.NET Core Identity. Essa parte é mais simples ainda. Vamos ver abaixo.

Quando você está utilizando o Identity e autentica um usuário, como o código abaixo, essa autenticação cria um objeto do tipo “ClaimsPrincipal”.

Para quem ainda não conhece o Identity, o objeto “_signInManager” serve para assinar uma autenticação dado um nome e senha. No nosso caso estamos passando “model.Email” e “model.Password”.

Ok, agora, a partir desse momento, qualquer controladora da aplicação terá uma propriedade chamada “User”, que é do tipo “ClaimsPrincipal”.

Por exemplo, ao utilizar em modo debug o VSCode, consegui ver todos os claims de um usuário autenticado.

Caso eu deseje, posso adicionar quantos Claims eu desejar e nesse caso não preciso alterar a minha classe “ApplicationUser” que herda de “IdentityUser”.

Por exemplo, utilizando a classe do tipo “UserManager” eu posso adicionar um Claim.

Note que após criar um usuário, através do método “CreateAsync” do objeto “UserManager”, eu estou utilizando o mesmo objeto para adicionar uma Claim através do método “AddClaimAsync”. Neste caso, estou adicionando uma Claim chamada EmployeerId com um valor 5.

Nesse exemplo, eu estou dando esse atributo para o usuário que for cadastrado e com isso podemos agora validar que somente os usuários que tem esse atributo podem acessar determinada pagina, lembra do começo do artigo quando eu falei sobre autorização? Vamos fazer isso agora.

Para criar essa autorização, devemos antes criar nossas políticas ou “policies” em C#. Então, let’s go.

Na classe Startup, método ConfigureServices, eu insiro minha política.

Repare que eu criei uma política chamada “OnlyEmployeers” e para atender a isso o usuário deve ter um atributo chamado “EmployeerId”.

Criado essa política, podemos agora tratar nossas autorizações nas controladoras, no exemplo abaixo eu estou utilizando a controladora chamada “ManageController”, onde somente quem é empregado poderá acessa-la, caso contrário, será redirecionado para uma tela de acesso negado.

Nesse momento, alguém deve estar se perguntando, mas o que é Roles Authorization? Não tem o mesmo sentido? Para que serve?

Sim, são parecidos, também serve para autorização de usuários, mas nesse caso baseado nos papeis que o usuário tem perante o sistema.

O problema é que somente papeis não é o bastante. Por exemplo, a alguns anos eu trabalhei em um projeto da UOL para criar uma nova plataforma de inglês. Nesse projeto nos preocupamos apenas com o conteúdo de aprendizagem, não nos preocupamos com a conta do usuário, pagamento e outras coisas que uma grande aplicação tem e por que isso?

Na UOL existe um sistema que efetua o gerenciamento do usuário e esse gerenciamento é baseado em atributos e o seu emissor. Quando um usuário efetua o pagamento do curso de inglês para a plataforma que desenvolvemos (Na UOL existe pelo menos 3 plataformas de inglês), o usuário ganha um atributo com o emissor sendo a nossa plataforma. Desta forma, quando o aluno efetua seu login na aplicação, validamos se existe o atributo e se somos o emissor.

Como podem ver, a lógica de atributos e emissores facilita a centralização das contas dos usuários para serem usadas por várias aplicações.

Conclusão

O Identity facilita desenvolver uma aplicação que necessita de contas de usuários e suas autorizações, mas antes, devemos saber conceitos simples como o que é autenticação, autorização e atributos. Desta forma, vamos criar soluções que podem atender a vários projetos.

Você gostou desse artigo? Gostaria de saber mais sobre ASP.NET Core? Eu desenvolvi um curso na Udemy, preço camarada e com mais de 13h de curso. Acesse https://www.udemy.com/aspnet-core-aprendendo-do-zero-ao-avancado/

Published in.Net Core

Be First to Comment

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *