IdentityServer para aplicativos nativos de nuvemIdentityServer for cloud-native applications

IdentityServer é um servidor de autenticação que implementa os padrões do OpenID Connect (OIDC) e do OAuth 2,0 para ASP.NET Core.IdentityServer is an authentication server that implements OpenID Connect (OIDC) and OAuth 2.0 standards for ASP.NET Core. Ele foi projetado para fornecer uma maneira comum de autenticar solicitações para todos os seus aplicativos, sejam eles Web, nativos, móveis ou pontos de extremidade de API.It's designed to provide a common way to authenticate requests to all of your applications, whether they're web, native, mobile, or API endpoints. IdentityServer pode ser usado para implementar um único Sign-On (SSO) para vários aplicativos e tipos de aplicativos.IdentityServer can be used to implement Single Sign-On (SSO) for multiple applications and application types. Ele pode ser usado para autenticar usuários reais por meio de formulários de entrada e interfaces de usuário semelhantes, bem como a autenticação baseada em serviço que normalmente envolve a emissão de tokens, a verificação e a renovação sem qualquer interface do usuário.It can be used to authenticate actual users via sign-in forms and similar user interfaces as well as service-based authentication that typically involves token issuance, verification, and renewal without any user interface. O IdentityServer foi projetado para ser uma solução personalizável.IdentityServer is designed to be a customizable solution. Cada instância é normalmente personalizada para atender a uma organização individual e/ou a um conjunto de necessidades de aplicativos.Each instance is typically customized to suit an individual organization and/or set of applications' needs.

Cenários comuns de aplicativos WebCommon web app scenarios

Normalmente, os aplicativos precisam dar suporte a alguns ou todos os seguintes cenários:Typically, applications need to support some or all of the following scenarios:

  • Usuários humanos que acessam aplicativos Web com um navegador.Human users accessing web applications with a browser.
  • Usuários humanos que acessam APIs Web de back-end de aplicativos baseados em navegador.Human users accessing back-end Web APIs from browser-based apps.
  • Usuários humanos em clientes móveis/nativos que acessam APIs Web de back-end.Human users on mobile/native clients accessing back-end Web APIs.
  • Outros aplicativos que acessam APIs Web de back-end (sem uma interface do usuário ou usuário ativo).Other applications accessing back-end Web APIs (without an active user or user interface).
  • Qualquer aplicativo pode precisar interagir com outras APIs da Web, usando sua própria identidade ou delegando para a identidade do usuário.Any application may need to interact with other Web APIs, using its own identity or delegating to the user's identity.

Tipos e cenários de aplicativos

Figura 8-1.Figure 8-1. Tipos de aplicativos e cenários.Application types and scenarios.

Em cada um desses cenários, a funcionalidade exposta precisa ser protegida contra uso não autorizado.In each of these scenarios, the exposed functionality needs to be secured against unauthorized use. No mínimo, isso normalmente requer a autenticação do usuário ou entidade de segurança que faz uma solicitação para um recurso.At a minimum, this typically requires authenticating the user or principal making a request for a resource. Essa autenticação pode usar um dos vários protocolos comuns, como SAML2p, WS-enalimentado ou OpenID Connect.This authentication may use one of several common protocols such as SAML2p, WS-Fed, or OpenID Connect. A comunicação com APIs normalmente usa o protocolo OAuth2 e seu suporte para tokens de segurança.Communicating with APIs typically uses the OAuth2 protocol and its support for security tokens. Separar essas preocupações críticas de segurança abrangentes e seus detalhes de implementação dos próprios aplicativos garante a consistência e melhora a segurança e a facilidade de manutenção.Separating these critical cross-cutting security concerns and their implementation details from the applications themselves ensures consistency and improves security and maintainability. Terceirizar essas preocupações com um produto dedicado, como o IdentityServer, ajuda o requisito para cada aplicativo resolver esses problemas em si.Outsourcing these concerns to a dedicated product like IdentityServer helps the requirement for every application to solve these problems itself.

O IdentityServer fornece middleware que é executado em um aplicativo ASP.NET Core e adiciona suporte para OpenID Connect e OAuth2 (consulte especificações com suporte).IdentityServer provides middleware that runs within an ASP.NET Core application and adds support for OpenID Connect and OAuth2 (see supported specifications). As organizações criarão seu próprio aplicativo de ASP.NET Core usando o middleware IdentityServer para atuar como o STS para todos os seus protocolos de segurança baseados em token.Organizations would create their own ASP.NET Core app using IdentityServer middleware to act as the STS for all of their token-based security protocols. O middleware IdentityServer expõe pontos de extremidade para dar suporte à funcionalidade padrão, incluindo:The IdentityServer middleware exposes endpoints to support standard functionality, including:

  • Autorizar (autenticar o usuário final)Authorize (authenticate the end user)
  • Token (solicitar um token programaticamente)Token (request a token programmatically)
  • Descoberta (metadados sobre o servidor)Discovery (metadata about the server)
  • Informações do usuário (obter informações do usuário com um token de acesso válido)User Info (get user information with a valid access token)
  • Autorização do dispositivo (usada para iniciar a autorização do fluxo do dispositivo)Device Authorization (used to start device flow authorization)
  • Introspecção (validação de token)Introspection (token validation)
  • Revogação (revogação de token)Revocation (token revocation)
  • Encerrar sessão (disparar saída única em todos os aplicativos)End Session (trigger single sign-out across all apps)

IntroduçãoGetting started

IdentityServer4 está disponível sob licença dupla:IdentityServer4 is available under dual license:

  • RPL – permite que você use o IdentityServer4 Free se usado em trabalho de código abertoRPL - let's you use the IdentityServer4 free if used in open source work
  • Pago – permite usar o IdentityServer4 em um cenário comercialPaid - let's you use the IdentityServer4 in a commercial scenario

Entre em contato com a página de preços do produto oficial.Please reach out to official Product's pricing page.

Você pode adicioná-lo aos seus aplicativos usando seus pacotes NuGet.You can add it to your applications using its NuGet packages. O pacote principal é IdentityServer4 que foi baixado em mais de 4 milhões vezes.The main package is IdentityServer4 that has been downloaded over four million times. O pacote base não inclui nenhum código de interface do usuário e só dá suporte à configuração da memória.The base package doesn't include any user interface code and only supports in memory configuration. Para usá-lo com um banco de dados, você também desejará um provedor de data como o IdentityServer4. EntityFramework que usa Entity Framework Core para armazenar a configuração e os dados operacionais do IdentityServer.To use it with a database, you'll also want a data provider like IdentityServer4.EntityFramework that uses Entity Framework Core to store configuration and operational data for IdentityServer. Para a interface do usuário, você pode copiar arquivos do repositório de IU de início rápido para seu aplicativo ASP.NET Core MVC para adicionar suporte para entrar e sair usando o middleware IdentityServer.For user interface, you can copy files from the Quickstart UI repository into your ASP.NET Core MVC application to add support for sign in and sign out using IdentityServer middleware.

ConfiguraçãoConfiguration

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.IdentityServer supports different kinds of protocols and social authentication providers that can be configured as part of each custom installation. Isso normalmente é feito na classe do aplicativo ASP.NET Core Startup no ConfigureServices método.This is typically done in the ASP.NET Core application's Startup class in the ConfigureServices method. A configuração envolve especificar os protocolos com suporte e os caminhos para os servidores e pontos de extremidade que serão usados.The configuration involves specifying the supported protocols and the paths to the servers and endpoints that will be used. A Figura 8-2 mostra uma configuração de exemplo obtida do projeto de interface do usuário do IdentityServer4 QuickStart:Figure 8-2 shows an example configuration taken from the IdentityServer4 Quickstart UI project:

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.Figure 8-2. Configurando o IdentityServer.Configuring IdentityServer.

O IdentityServer também hospeda um site de demonstração pública que pode ser usado para testar vários protocolos e configurações.IdentityServer also hosts a public demo site that can be used to test various protocols and configurations. Ele está localizado em https://demo.identityserver.io/ e inclui informações sobre como configurar seu comportamento com base no client_id fornecido a ele.It's located at https://demo.identityserver.io/ and includes information on how to configure its behavior based on the client_id provided to it.

Clientes JavaScriptJavaScript clients

Muitos aplicativos nativos de nuvem aproveitam as APIs do lado do servidor e os aplicativos de página única (SPAs) de cliente avançado no front-end.Many cloud-native applications leverage server-side APIs and rich client single page applications (SPAs) on the front end. O IdentityServer envia um cliente JavaScript ( oidc-client.js ) por meio de NPM que pode ser adicionado ao spas para permitir que eles usem o IdentityServer para entrar, sair e autenticação baseada em token de APIs da Web.IdentityServer ships a JavaScript client (oidc-client.js) via NPM that can be added to SPAs to enable them to use IdentityServer for sign in, sign out, and token-based authentication of web APIs.

ReferênciasReferences