Partilhar via


IdentityServer para aplicativos nativos da nuvem

Dica

Este conteúdo é um excerto do eBook Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.

miniatura da capa dos aplicativos .NET nativos da nuvem para eBook do Azure.

Duende IdentityServer é uma framework para construir um servidor de autenticação compatível com os padrões OpenID Connect (OIDC) e OAuth 2.x, utilizando ASP.NET Core.

Foi concebido para fornecer uma forma comum de autenticar pedidos para todas as suas aplicações, sejam elas web, nativas, móveis ou endpoints API. O IdentityServer pode ser usado para implementar Sign-On único (SSO) para vários aplicativos e tipos de aplicativos. Ele pode ser usado para autenticar usuários reais por meio de formulários de entrada e interfaces de usuário semelhantes, bem como autenticação baseada em serviço que normalmente envolve emissão, verificação e renovação de token sem qualquer interface de usuário. Pode também funcionar como um gateway de federação para unificar os fornecedores de autenticação.

O IdentityServer foi projetado para ser uma solução personalizável. Cada instância é normalmente personalizada para se adequar a uma organização individual ou às necessidades de um conjunto de aplicações.

Cenários comuns de aplicativos Web

Normalmente, os aplicativos precisam oferecer suporte a alguns ou a todos os seguintes cenários:

  • Usuários humanos acessando aplicativos da web com um navegador.
  • Usuários humanos acessando APIs da Web back-end a partir de aplicativos baseados em navegador.
  • Usuários humanos em clientes móveis/nativos que acessam APIs da Web back-end.
  • Outros aplicativos que acessam APIs Web back-end (sem um usuário ativo ou interface de usuário).
  • Qualquer aplicativo pode precisar interagir com outras APIs da Web, usando sua própria identidade ou delegando à identidade do usuário.

Tipos de aplicativos e cenários

Figura 8-1. Tipos de aplicação e cenários.

Em cada um desses cenários, a funcionalidade exposta precisa ser protegida contra uso não autorizado. No mínimo, isso normalmente requer a autenticação do usuário ou principal que faz uma solicitação para um recurso. Essa autenticação pode usar um dos vários protocolos comuns, como SAML2p, WS-Fed ou OpenID Connect. A comunicação com APIs utiliza tipicamente o protocolo OAuth 2 e o seu suporte para tokens de segurança. Separar essas preocupações críticas e transversais de segurança e seus detalhes de implementação dos próprios aplicativos garante consistência e melhora a segurança e a capacidade de manutenção. Terceirizar essas preocupações para um produto dedicado como o IdentityServer ajuda a exigir que cada aplicativo resolva esses problemas por si só.

O IdentityServer fornece middleware que corre dentro de uma aplicação ASP.NET Core e adiciona suporte para OpenID Connect e OAuth 2.x (ver especificações suportadas). Usando o IdentityServer, as organizações podem criar a sua própria aplicação ASP.NET Core usando middleware IdentityServer para atuar como servidor de autorização para todos os seus protocolos de segurança baseados em tokens. O middleware IdentityServer expõe endpoints para suportar a funcionalidade padrão, incluindo:

  • Autorizar (autenticar o usuário final)
  • Token (solicitar um token programaticamente)
  • Descoberta (metadados sobre o servidor)
  • Informações do usuário (obter informações do usuário com um token de acesso válido)
  • Autorização de dispositivo (usada para iniciar a autorização de fluxo de dispositivo)
  • Introspeção (validação de token)
  • Revogação (revogação de token)
  • Encerrar sessão (acionar a saída única em todos os aplicativos)
  • Pedidos de Autorização Push (para um processo de autenticação mais seguro)

Primeiros passos

O IdentityServer está disponível:

Para obter mais informações sobre preços, consulte a página de preços do produto oficial.

Você pode adicioná-lo aos seus aplicativos usando seus pacotes NuGet. O pacote principal é IdentityServer, que foi baixado mais de quatro milhões de vezes. O pacote base não inclui nenhum código de interface do usuário e suporta apenas a configuração na memória. Para usá-lo com um banco de dados, você também desejará um provedor de dados como Duende.IdentityServer.Storage, que usa o Entity Framework Core para armazenar dados operacionais e de configuração para o IdentityServer. Para a interface de utilizador, podes copiar ficheiros do repositório de samples para a tua aplicação ASP.NET Core MVC para adicionar suporte para iniciar sessão e sair usando middleware IdentityServer.

Configuração

O IdentityServer suporta diferentes tipos de protocolos e provedores de autenticação social que podem ser configurados como parte de cada instalação personalizada. Isto é normalmente feito na classe Program da aplicação ASP.NET Core. A configuração envolve a especificação dos protocolos suportados e os caminhos para os servidores e pontos de extremidade que serão usados. A Figura 8-2 mostra um exemplo de configuração retirado do IdentityServer Quickstart for ASP.NET Core applications project:

// some details omitted
builder.Services.AddIdentityServer();

builder.Services.AddAuthentication(options =>
    {
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";
    })
    .AddCookie("Cookies")
    .AddGoogle("Google", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

        options.ClientId = "<insert here>";
        options.ClientSecret = "<insert here>";
    })
    .AddOpenIdConnect("oidc", options =>
    {
        options.Authority = "https://localhost:5001";

        options.ClientId = "web";
        options.ClientSecret = "secret";
        options.ResponseType = "code";

        options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("profile");

        options.MapInboundClaims = false; // Don't rename claim types

        options.SaveTokens = true;
    });
}

Figura 8-2. Configurando o IdentityServer.

Clientes JavaScript

Muitas aplicações nativas para a cloud utilizam APIs de servidor e aplicações de página única ricas (SPAs) do lado do cliente, por exemplo, usando React, Angular ou Blazor WebAssembly. O padrão backend-for-frontend (BFF) é utilizado para este tipo de clientes, o que permite manter os tokens fora do alcance do navegador. Este padrão segue a especificação OAuth 2.0 for Browser-Based Applications do IETF.

Referências