Partilhar via


IdentityServer para aplicativos nativos da nuvem

Gorjeta

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.

Cloud Native .NET apps for Azure eBook cover thumbnail.

IdentityServer é um servidor de autenticação que implementa os padrões OpenID Connect (OIDC) 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 pontos de extremidade da Web, nativos, móveis ou API. O IdentityServer pode ser usado para implementar o Single Sign-On (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. O IdentityServer foi projetado para ser uma solução personalizável. Cada instância é normalmente personalizada para atender às necessidades de uma organização individual e/ou conjunto de aplicativos.

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.

Application types and scenarios

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 normalmente usa o protocolo OAuth2 e 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 é executado em um aplicativo ASP.NET Core e adiciona suporte para OpenID Connect e OAuth2 (consulte as especificações suportadas). As organizações criariam seu próprio aplicativo ASP.NET Core usando middleware IdentityServer para atuar como o STS para todos os seus protocolos de segurança baseados em token. O middleware IdentityServer expõe pontos de extremidade para oferecer 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 (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)

Introdução

IdentityServer4 está disponível sob licença dupla:

  • RPL - permite que você use o IdentityServer4 gratuitamente se usado em trabalho de código aberto
  • Pago - permite usar o IdentityServer4 em um cenário comercial

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

Você pode adicioná-lo aos seus aplicativos usando seus pacotes NuGet. O pacote principal é o IdentityServer4, 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 IdentityServer4.EntityFramework, que usa o Entity Framework Core para armazenar dados operacionais e de configuração para o IdentityServer. Para a interface do usuário, você pode copiar arquivos do repositório Quickstart UI para seu aplicativo MVC ASP.NET Core para adicionar suporte para entrar e sair usando o 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. Isso geralmente é feito na classe do aplicativo Program ASP.NET Core (ou na Startup classe no ConfigureServices método). 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 tirada do projeto de interface do usuário de início rápido 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. Configurando o IdentityServer.

Clientes JavaScript

Muitos aplicativos nativos da 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) 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 da Web.

Referências