ASP.NET Core 3.1 — IdentityServer4 — EF-support (Parte 4)

Na Parte 1 falei sobre a configuração do IdentityServer4 para que funcione em memória, esta forma possui alguns benefícios de curto prazo para testar e validar o processo de desenvolvimento dos serviços e para que você não dependa de um banco de dados.

Como já comentei próprio IdentityServer sugere que você não use a configuração in-memory em produção e sim passe a utilizar a configuração em store como é chamado, ou seja, utilizando um banco de dados onde os dados possam ser persistidos. Então, vamos utilizar o SQLServer para ser a nossa store.

No meu caso eu estou utilizando docker para poder ter um banco de dados disponível de forma rápida e prática em ambiente de desenvolvimento. Os DBA’s reforçam que você nunca deve ter um banco de dados SQLServer em produção dentro de um container, porém para desenvolvimento é uma prática natural e muito ágil pela facilidade e velocidade de configuração.

Docker

  • Se você tiver Windows Home instalado, vai precisar usar o docker como se fosse serviços virtualizados pelo VirtualBox por exemplo;
  • Para Windows Pro, você pode baixar o docker desktop vai facilitar muito a sua vida e é o meu caso.

Eu estou utilizando o docker com containers em Linux, pois as imagens são menores.

Instalando SQLServer com Docker

docker run -e ‘ACCEPTEULA=Y’ -e ‘SAPASSWORD=Password!’ -p 1433:1433 -d — restart unless-stopped -v sqlserver-volume:/var/opt/mssql mcr.microsoft.com/mssql/server:2017-latest

O comando acima realiza o download da última versão do SQLServer Docker e cria o volume ‘sqlserver-volume’ automaticamente caso não exista.
O comando --restart unless-stopped é para caso o servidor reinicie (ou seu PC), ao retornar inicializa o container automaticamente. Mais detalhes aqui
O uso do volume permite a persistência dos dados caso o container do SQLServer seja eventualmente removido ou recriado em outra versão. Caso você remover o container e criá-lo novamente, o volume vai apoiar na manutenção da base de dados que já existia, sem perder as informações.

  • Usuário: sa
  • Senha: Password!
  • Porta: 1433, esta já é a porta padrão do SQLServer

Através do Visual Studio, você tem o SQL Server Object Explorer, adicione um novo servidor com as configurações conforme a tela abaixo e pronto, você se conectará ao banco de dados que foi criado.

Funcionalidades

Estas funcionalidades são utilizadas para que os dados possam ser persistidos e utilizados a partir do suporte do EntityFramework em uma base de dados.

Configuration Store

Operational Store

Statup

appsettings

Seed

Grant Type — Client Credentials

Migrations

Microsoft.EntityFramework Microsoft.EntityFramework.Tools

Add-Migration Initial -Context ConfigurationDbContext Update-Database -Context ConfigurationDbContext

Add-Migration Initial -Context PersistedGrantDbContext Update-Database -Context PersistedGrantDbContext

Execução

Caso você tenha dúvidas, eu disponibilizei o código no GitHub em um branch chamado identityserver-sqlserver.

Continua na Parte 5.