Share via


IdentityServer para aplicativos nativos de nuvem

Dica

Esse conteúdo é um trecho do livro eletrônico, para Projetar os Aplicativos .NET nativos de nuvem para o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

Cloud Native .NET apps for Azure eBook cover thumbnail.

O 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 como um modo comum de autenticar solicitações para todos os aplicativos, sejam eles Web, nativos, móveis ou de pontos de extremidade de API. O IdentityServer pode ser usado para implementar o SSO (logon único) 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 do usuário semelhantes, bem como pela autenticação baseada em serviço que geralmente envolve emissão, verificação e renovação de token sem nenhuma interface do usuário. O IdentityServer foi projetado como uma solução personalizável. Cada instância normalmente é personalizada para atender às necessidades de uma organização individual e/ou de um conjunto de aplicativos.

Cenários comuns de aplicativo Web

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

  • Usuários humanos que acessam 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 uma interface do usuário).
  • Qualquer aplicativo pode precisar interagir com outras APIs Web usando a própria identidade ou com a delegação à identidade do usuário.

Application types and scenarios

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

Em cada um desses cenários, a funcionalidade exposta precisa ser protegida contra uso não autorizado. Para isso, é necessário no mínimo autenticar o usuário ou a entidade de segurança fazendo uma solicitação a um recurso. Essa autenticação pode usar um dos vários protocolos comuns, como SAML2p, WS-Fed ou OpenID Connect. A comunicação com as APIs normalmente usa o protocolo OAuth2 e o respectivo suporte para tokens de segurança. A separação dessas considerações críticas de segurança cruzada e os detalhes de implementação dos próprios aplicativos garante a consistência e aprimora a segurança e a manutenção. A terceirização dessas considerações a um produto dedicado como o IdentityServer ajuda no requisito de que cada aplicativo resolva esses problemas por conta própria.

O IdentityServer oferece um middleware executado em um aplicativo ASP.NET Core e adiciona o suporte ao OpenID Connect e ao OAuth2 (confira as especificações com suporte). Dessa forma, as organizações criam o próprio aplicativo ASP.NET Core usando o middleware do IdentityServer para atuar como o STS de todos os protocolos de segurança baseados em token. O middleware do IdentityServer expõe pontos de extremidade para dar suporte à funcionalidade padrão, incluindo:

  • Autorização (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 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 IdentityServer4 está disponível em duas licenças:

  • RPL – Permite que você use o IdentityServer4 gratuitamente apenas para trabalho de código aberto
  • Pago – Permite que você use o IdentityServer4 em um cenário comercial

Para obter informações detalhadas sobre os preços, confira a página de preços.

Você pode adicioná-lo aos seus aplicativos usando pacotes NuGet. O pacote principal é o IdentityServer4, que já 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 precisa de um provedor de dados, como o IdentityServer4.EntityFramework, que usa o Entity Framework Core para armazenar dados operacionais e de configuração do IdentityServer. Para a interface do usuário, você pode copiar arquivos do repositório de interface do usuário de início rápido para o aplicativo MVC do ASP.NET Core para adicionar suporte de entrada e saída usando o middleware do IdentityServer.

Configuração

O IdentityServer dá suporte a diferentes tipos de protocolos e provedores de autenticação social que podem ser configurados durante cada instalação personalizada. Isso costuma ser feito na classe Program do aplicativo ASP.NET Core (ou na classe Startup do 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 um exemplo de configuração obtido do projeto de interface do usuário de início rápido do IdentityServer4:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // some details omitted
        services.AddIdentityServer();

          services.AddAuthentication()
            .AddGoogle("Google", options =>
            {
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

                options.ClientId = "<insert here>";
                options.ClientSecret = "<insert here>";
            })
            .AddOpenIdConnect("demoidsrv", "IdentityServer", options =>
            {
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                options.SignOutScheme = IdentityServerConstants.SignoutScheme;

                options.Authority = "https://demo.identityserver.io/";
                options.ClientId = "implicit";
                options.ResponseType = "id_token";
                options.SaveTokens = true;
                options.CallbackPath = new PathString("/signin-idsrv");
                options.SignedOutCallbackPath = new PathString("/signout-callback-idsrv");
                options.RemoteSignOutPath = new PathString("/signout-idsrv");

                options.TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = "name",
                    RoleClaimType = "role"
                };
            });
    }
}

Figura 8-2. Configuração do IdentityServer.

Clientes JavaScript

Muitos aplicativos nativos de nuvem usam APIs do lado do servidor e SPAs (aplicativos de página única) de cliente avançado no front-end. O IdentityServer envia um cliente JavaScript (oidc-client.js) por meio do NPM que pode ser adicionado aos SPAs para permitir que eles usem o IdentityServer para autenticação de entrada, de saída e baseada em token de APIs Web.

Referências