ASP.NET Core 3.1 — IdentityServer4 — App Settings On Azure (Parte 13)

Na Parte 12 eu mostrei as premissas do Azure e como configurar o certificado digital. Agora vamos ver como nossa aplicação do IdentityServer4 vai usar essas configurações.

Program.cs

A primeira alteração foi feita para que houvesse suporte ao appsettings.json conforme o ambiente selecionado através das options do método ConfigureAppConfiguration conforme exibido a seguir.

Isso significa que para cada ambiente (Development, Staging e Production) podemos ter configurações diferentes.
Por padrão ao criar um projeto ASP.NET Core, a variável de ambiente é sempre Development, você pode conferir este detalhe nas propriedades do projeto conforme imagem a seguir.

No Azure

No Azure, por definição tudo é Production e para que você tenha a liberdade de trabalhar com outros ambientes, você pode utilizar os Deployment Slots. Um detalhe, para que o App Service libere o funcionamento por slots você deve estar vinculado a um service plan standard or premium, significa que não é o free, nem o shared tão pouco o basic, são planos mais avançados. O que o slot faz é configurar a variável de ambiente “ASPNETCORE_ENVIRONMENT” com a opção desejada, com isso automaticamente o arquivo appsettings..json é de onde as configurações serão carregadas.

Nosso arquivo que possui as configurações de produção para esta série, até este momento está configurado conforme a seguir.

Para ler as configurações, criei a classe AppSettings conforme a seguir.

No método ConfigureServices no Startup.cs incluí a linha:

services.Configure(_configuration.GetSection(nameof(AppSettings)));

O método Configure acima, realiza dois trabalhos:

services.AddOptions()

services.AddSingleton da classe AppSettings

Com isso, podemos pegar os dados do appsettings.<>.json através de injeção de dependência ou usando Service Locator. Vou falar sobre o Service Locator mais abaixo.

Boas práticas

Juntamente com o código eu aproveitei e fiz algumas mudanças para começar um processo de limpeza do código utilizando métodos de extensão.

Extension Methods

Esta funcionalidade foi disponibilizada no C# 3.0 permitindo estender funcionalidades de uma classe especifica do framework. Os métodos de extensão permitem que sejam adicionados outros métodos à tipos existentes sem que haja necessidade de implementar heranças, classes parciais ou até mesmo compilar o código para que estejam disponíveis.

Premissas

  1. A classe precisa ser estática;
  2. O método precisa ser estático;
  3. Para que o método seja exibido, o primeiro parâmetro deve ser precedido do this, depois a classe ou interface e o nome do parâmetro.

Método de Extensão para Certificado Digital

Criei a classe IdentityServerSigningCredentialExtension onde o método AddCustomSigningCredential utiliza os dados do appsettings.<>.json para mudar o comportamento quando o IdentityServer4 estiver publicado no Azure ou não.

Service Locator

Como a classe onde está o método de extensão é estática, não possui suporte a um construtor, sendo assim não há como através de injeção de dependência pegar os dados do arquivo de configurações, sendo assim, vamos usar o Service Locator para isso.
No método AddCustomSigningCredential temos a linha a seguir e é através dela que conseguimos obter o objeto instanciado populado com os valores.

var appSettings = services.BuildServiceProvider().GetService>().CurrentValue;

Refactoring

Além do método de extensão responsável pela coleta das informações do arquivo de configurações, criei outros métodos para que o código fique mais clean e aos olhos das boas práticas também mais elegante.

Você pode conferir tudo isso no Github.

Continua em ASP.NET Core — Console — App Service Editor On Azure (Parte 14).

Originally published at http://alextochetto.com on May 19, 2020.

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alex Tochetto

Alex Tochetto

More from Medium

Handling PATCH Updates in ASP.NET Core

.NET — LINQ Queries with SQL

Simple GitHub actions reusable workflow using .NET 6

Pass Through Data Over IServiceProvider.CreateScope()