Compartilhar via


IdentityServer para aplicativos nativos de nuvem

Dica

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

Miniatura de capa do eBook

IdentityServer é um servidor de autenticação que implementa os padrões OIDC (OpenID Connect) e OAuth 2.0 para ASP.NET Core. Ele foi projetado para fornecer uma maneira comum de autenticar solicitações para todos os seus aplicativos, sejam eles web, nativos ou móveis, ou endpoints de API. O IdentityServer pode ser usado para implementar o SSO (Single Sign-On) para vários aplicativos e tipos de aplicativo. 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 do usuário. IdentityServer foi projetado para ser uma solução personalizável. Cada instância normalmente é personalizada para atender a uma organização individual e/ou conjunto de necessidades de aplicativos.

Cenários comuns de aplicativo Web

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

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

tipos e cenários de aplicativos

Figura 8-1. Tipos e cenários de aplicativo.

Em cada um desses cenários, a funcionalidade exposta precisa ser protegida contra uso não autorizado. No mínimo, isso normalmente requer autenticar o usuário ou a entidade fazendo 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 normalmente usa o protocolo OAuth2 e seu suporte para tokens de segurança. Separar essas questões críticas e transversais de segurança e seus detalhes de implementação dos próprios aplicativos garante a consistência e melhora a segurança e a mantibilidade. Terceirizar essas preocupações para um produto dedicado, como o IdentityServer, elimina a necessidade de que cada aplicativo resolva esses problemas por conta própria.

O IdentityServer fornece middleware que é executado em um aplicativo ASP.NET Core e adiciona suporte para OpenID Connect e OAuth2 (consulte especificações compatíveis). As organizações criariam seu próprio aplicativo ASP.NET Core usando o middleware IdentityServer para atuar como STS para todos os seus protocolos de segurança baseados em token. O middleware do IdentityServer expõe pontos de extremidade para dar suporte à 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 (obtenha informações do usuário com um token de acesso válido)
  • Autorização de dispositivo (usada para iniciar a autorização de fluxo do dispositivo)
  • Introspecção (validação de token)
  • Revogação (revogação de token)
  • Encerramento de sessão (disparar a saída única em todos os aplicativos)

Introdução

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 dá suporte apenas à 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 IdentityServer. Para a interface do usuário, você pode copiar arquivos do repositório Quickstart UI em seu aplicativo ASP.NET Core MVC para adicionar suporte para login e logout usando o middleware IdentityServer.

Configuração

O IdentityServer dá suporte a diferentes tipos de protocolos e provedores de autenticação social que podem ser configurados como parte de cada instalação personalizada. Normalmente, isso é feito na classe Program do aplicativo ASP.NET Core (ou na classe Startup no método ConfigureServices). A configuração envolve especificar os protocolos com suporte e os caminhos para os servidores e pontos de extremidade que serão usados. A Figura 8-2 mostra uma configuração de exemplo obtida do Início Rápido do IdentityServer para aplicativos do projeto ASP.NET Core.

// 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

Muitos aplicativos nativos de nuvem usam APIs do lado do servidor e SPAs (aplicativos de página única) de cliente avançados no front-end. O IdentityServer fornece um cliente JavaScript (oidc-client.js) via NPM que pode ser adicionado aos SPAs para permitir que eles usem o IdentityServer para entrar, sair e autenticação baseada em token de APIs Web. Além disso, você pode usar um backend-for-frontend (BFF) que implementa todas as interações do protocolo de segurança com o servidor de token e o OAuth 2.0 para especificações de Aplicações baseadas em navegadores da IETF (Internet Engineering Task Force).

Referências

Anterior Próximo