Os aplicativos multicamadas envolvem comunicações em diferentes níveis. Por exemplo, o navegador se comunicando com as APIs da Web e as APIs da Web se comunicando com outras APIs da Web em nome dos usuários e assim por diante. Para habilitar a comunicação segura, os protocolos de autenticação e autorização podem exigir tratamento adicional.
É dificilmente sustentável, pois qualquer alteração no uso da API se traduziria em alterações na lógica envolvida com o acesso autorizado. Consequentemente, haverá gargalos de teste e implantação, especialmente ao lidar com microsserviços.
Para amenizar esse problema, Serviço de token de segurança (STS) fornece um repositório central onde a lógica de autorização distribuída entre os diferentes componentes do aplicativo pode ser descarregada. Principalmente, o STS é responsável por emitir tokens e validar declarações para resolver o problema de acesso com escopo aos recursos.
Vejamos o diagrama abaixo para ter uma ideia geral do serviço de token de segurança que está sendo usado.
Servidor de Identidade4 é um STS frequentemente usado em .NET Core aplicativos que implementam os protocolos OpenID connect e OAuth 2.0. Vejamos o diagrama abaixo para ter uma ideia geral do serviço de token de segurança que está sendo usado.
NCache Adicionar ao carrinho NCache com IdentityServer4 Chaves de cache e visão geral dos dados
IdentityServer com NCache
A API IdentityServer4 oferece a flexibilidade de usar qualquer armazenamento personalizado externo, seja um banco de dados relacional, um NoSQL solução, um sistema de arquivos ou até mesmo um armazenamento de dados na memória como NCache. Para isso, os autores do IdentityServer4 implementaram Núcleo do Entity Framework (EF) suporte para IdentityServer4 tornando muito fácil usar qualquer banco de dados como meio de armazenamento para o IdentityServer4 configuração e dados operacionais.
NCache, sendo um software em memória distribuído e escalável armazenamento de valor-chave, é uma ótima opção para IdentityServer4. Ele pode ser usado com o IdentityServer de uma das seguintes maneiras.
- NCache pode ser usado como armazenamento de cache para IdentityServer4 configuração e dados operacionais para acelerar as operações por meio do cache na memória, bem como reduzir os acessos ao banco de dados.
- NCache pode ser usado como configuração e armazenamento de concessão persistente para aumentar ainda mais o desempenho removendo o gargalo de ter que obter dados de um disco. O conteúdo na memória do cache pode então ser mantido periodicamente no disco, diminuindo drasticamente o tempo médio necessário para obter os dados.
Você também pode misturar e combinar as funções de cache e armazenamento de NCache por exemplo, use-o como uma camada de cache para armazenamento de configuração e como um armazenamento autônomo para dados operacionais. Tudo isso é implementado usando o IIdentityServerBuilder NCache métodos de extensão usados durante o ASP.NET Core Injeção de dependência.
- Armazenamento de configuração: uma loja onde são mantidos dados estáticos que não mudam como tal.
- Loja operacional: uma loja onde os dados operacionais são mantidos em que as operações são executadas e é mais provável que sejam modificados com frequência.
A vantagem disso é que você pode ter seu armazenamento de dados na memória, o que produz resultados melhores e mais rápidos. Vamos mergulhar lentamente nos detalhes de como isso é feito, mas existem alguns pré-requisitos a serem atendidos antes de começar.
NCache Adicionar ao carrinho NCache com IdentityServer4 Chaves de cache e visão geral dos dados
Pré-requisitos
- .NET Core 3.0 e 3.1 SDK e tempos de execução.
- NCache Enterprise 5.0 SP1 ou em execução no(s) seu(s) servidor(es).
- Consulte o Solução GitHub para obter as informações sobre o aplicativo que está sendo usado. Ao longo do blog, as alterações de código são explicadas de acordo com a mesma aplicação.
Cenário 1: NCache como um armazenamento in-memory IdentityServer4
Você pode armazenar informações sobre os clientes, recursos de API, recursos de identidade, etc. (configurações) e/ou concessões persistentes e códigos de fluxo do dispositivo, etc. (operações) ao usar NCache como o armazenamento do IdentityServer.
Agora vamos ver onde NCache cabe na imagem:
Para utilizar NCache para a configuração e dados operacionais:
- No cs do seu projeto, adicione o.Use StartupNCache> () e adicione o seguinte código no ComeceNcache.cs arquivo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); var builder = services.AddIdentityServer() .AddTestUsers(TestUsers.Users) .AddNCacheConfigurationStore(options => { options.CacheId = _configuration["CacheId"]; var serverList = _configuration["Servers"].Split(',') .Select(x => x.Trim()) .ToList() .Select(y => new NCacheServerInfo(y, 9800)) .ToList(); options.ConnectionOptions = new NCacheConnectionOptions { ServerList = serverList, EnableClientLogs = true, LogLevel = NCacheLogLevel.Debug }; }) //.. rest of the code } |
- No appsettings.json arquivo, modifique o valor do CacheId key para o nome do cache que você está usando. Além disso, para os múltiplos Servidores chaves, use uma lista separada por vírgulas de um ou mais endereços IP pertencentes ao NCache servidores que compõem o NCache grupo.
1 2 3 4 |
{ "CacheId": "democache", "Servers": "20.200.20.45,20.200.20.50", } |
- Executar aplicativos IdentityServer, MvcClient, Api, JavaScriptClient para ver como NCache opera como um armazenamento operacional e de configuração do IdentityServer4 depois de verificar se o cache de demonstração usado como armazenamento operacional e de configuração está em execução e pode ser conectado ao aplicativo de exemplo do IdentityServer.
Cenário 2: NCache como implementação de cache IdentityServer4
NCacheA principal funcionalidade do é armazenar em cache os dados que persistem em sua fonte de dados para acesso mais rápido e melhor desempenho. Enquanto você pode usar NCache como seu armazenamento de dados, você também pode usar NCache entre seu armazenamento de dados e o aplicativo, armazenando em cache a configuração e/ou os dados operacionais em NCache enquanto também o mantém no armazenamento de dados.
Deixe a figura demonstrar como NCache funciona como um cache com IdentityServer4.
- Para implementar NCache como um armazenamento de configuração ao mesmo tempo em que persiste a configuração e os dados operacionais no armazenamento de dados, adicione UseInicialização> () e adicione o seguinte código no StartupEFCore.cs arquivo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public void ConfigureServices(IServiceCollection services) { ... var builder = services.AddIdentityServer() .AddTestUsers(TestUsers.Users) .AddNCacheCaching(options => { options.CacheId = _configuration["CacheId"]; var serverList = _configuration["Servers"].Split(',') .Select(x => x.Trim()) .ToList() .Select(y => new NCacheServerInfo(y, 9800)) .ToList(); options.ConnectionOptions = new NCacheConnectionOptions { ServerList = serverList }; options.DurationOfBreakInSeconds = 120; }); //.. rest of the code } |
- No appsettings.json arquivo, modifique o valor do CacheId key para o nome do cache que você usará. Além disso, para os múltiplos Servidores chaves, use uma lista separada por vírgulas de um ou mais endereços IP pertencentes ao NCache servidores que compõem o NCache cacho. Além disso, forneça a cadeia de conexão do SQL Server.
1 2 3 4 5 6 7 8 |
{ "CacheId": "democache", "Servers": "20.200.20.45,20.200.20.50", "ConnectionStrings": { "db": "server=;database=IdentityServer4.EntityFramework;UserId=userid;Password=password;" } } |
- Executar aplicativos IdentityServer, MvcClient, API, JavaScriptClient para ver como NCache opera como um mecanismo de cache para o armazenamento de configuração, o armazenamento de concessão persistente, bem como a implementação padrão de IProfileService. Certifique-se de que o cache usado como armazenamento de configuração e cache de armazenamento de concessão persistente esteja em execução e possa ser conectado ao Servidor de Identidade aplicativo de exemplo.
Conclusão
Resumindo, o IdentityServer faz toda a autenticação necessária em cada salto de rede em seu aplicativo e NCache se encaixa muito bem para manter os dados de configuração e operação para acesso mais rápido. Não apenas isso NCache também pode ser usado como seu armazenamento de dados e armazenar os dois tipos de dados na memória, dando a você a liberdade de livrar seu aplicativo de qualquer outra fonte de dados. Você obtém tudo isso usando os métodos de extensão fornecidos por NCache muito facilmente.
NCache Adicionar ao carrinho Baixar NCache Comparação de edições