.NET

12 abr, 2018

Criando um servidor de Identidade utilizando Identity Server 4 e ASP.NET Core 2

Publicidade

Introdução

Neste artigo, pretendo mostrar como criar um servidor de identidade para autenticarmos nossas aplicações através dele.

Antes de “colocarmos a mão na massa”, vamos entender de maneira simplificada como funciona o protocolo OAuth 2, a camada OpenID Connect e por fim, o Identity Server 4 para tirarmos mais proveito desse artigo (caso desejem ir mais a fundo, deixarei o link da documentação de cada um no final desse artigo).

OAuth 2

O OAuth 2.0 é um protocolo de autorização aberto que permite que uma aplicação acesse recursos protegidos de outra aplicação em nome de um usuário sem expor sua senha.

Exemplificando o que foi dito acima, é basicamente você acessar o Medium utilizando sua conta do Facebook para se autenticar.

Com isso, temos algumas vantagens como, por exemplo:

  • Não precisamos mais criar nem salvar uma nova senha em cada aplicação de terceiros que formos utilizar
  • Posso revogar um acesso a qualquer momento sem deixar “dados” pra trás

O OAuth 2.0 estabelece quatro definições para nós, para que isso seja possível:

  • Resource Owner: o “dono do recurso”
  • Resource Server: servidor que possui os recursos protegidos
  • Authorization Server: servidor que gera um token que permite que o cliente acesse os recursos que o Resource Owner permitiu
  • Client: aplicação que acessa os recursos no Resource Server em nome do usuário

Abaixo, ilustrei as definições descritas acima para melhor entendimento

  1. O Resource Owner através de um Client tenta acessar o Resource Server (mantendo o exemplo anterior, vamos imaginar que seja o Medium);
  2. Esse Resource Server “confia” em um Authorization Server (seguindo o mesmo exemplo, esse cara seria o Facebook);
  3. O Resource Owner se autentica no Authorization Server;
  4. O Authorization Server retorna um token de autenticação válido para o Client;
  5. O Client acessa o Resource Server.

Bom, agora que entendemos o fluxo básico do funcionamento do protocolo OAuth 2.0, vamos para o OpenID Connect.

OpenID Connect

O OpenID Connect é uma camada de identidade bem simples, criado sob o protocolo OAuth 2.0. Conforme dito acima, o OAuth 2.0 fornece um mecanismo de autenticação que gerará um token de acesso para acessarmos recursos protegidos em uma aplicação qualquer, porém, ele apenas “autentica”, não nos fornecendo nenhuma informação de identidade do usuário.

O OpenID Connect implementa uma “extensão” para o protocolo OAuth 2.0. É ele que vai nos fornecer informações sobre o usuário final na forma de um id_token que verifica a identidade do usuário e fornece informações básicas de perfil do mesmo.

Identity Server 4

O Identity Server 4 é um middleware feito na tecnologia .NET que utiliza o Oauth 2 e o OpenID Connect, e tem como finalidade permitir que diferentes aplicações (independentemente de tecnologia) “conversem entre si”. Ele também permite a criação de Single Sign-On, proteção de web API’s e gerenciamento de autorização de acesso.

Fonte: http://docs.identityserver.io

No Identity Server 4 nós possuimos três definições, que seguem abaixo:

  • Users: é uma pessoa, de fato, que possua as credenciais necessárias para acessar o servidor de identidade;
  • Clients: aplicações autorizadas a acessar o meu servidor de identidade, pois assim como os Users, eles vão possuir um nome e/ou Id de acesso;
  • Scopes: são basicamente as informações que um Client deseja acessar no meu servidor de identidade
Fonte: http://docs.identityserver.io

Bom, agora que já temos uma visão geral de como tudo funciona, na parte 2 desse artigo vamos começar a implementar o nosso servidor de identidade com o Identity Server 4 e com o Asp.Net Core 2.