Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.
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.
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:
- Com uma licença comunitária, que lhe permite utilizar o IdentityServer gratuitamente para pequenas empresas e organizações sem fins lucrativos (aplicam-se condições)
- Pago, que permite usar o IdentityServer num cenário comercial
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.