Aplicando segurança na Web

Aprenda como integrar o serviço de identidade do Keycloak no endpoint web para controle de acesso no microsserviço desenvolvido utilizando a plataforma Devprime. O Auth0 suporta OpenID Connect / OAuth 2.0 / JWT na proteção de páginas web e API’s.

Durante esse cenário nós utilizaremos o adapter de security do Devprime stack para ativar as configurações de segurança para quando houver uma solicitação de acesso ser requerido a autenticação do usuário em uma base centralizada do Keycloak.

Cheklist e preperação do ambiente inicial:

Criando um microserviço para utilizar no exemplo

O primeiro passo é criar um novo microsserviço para que possamos utilizar como modelo para publicar no host. O nome deste microsserviço será definido como “ms-order”, conforme demonstrado no comando abaixo.

  • Criando o primeiro microsserviço
    dp new ms-order --stream rabbitmq --state mongodb
  • Adicionando uma regra de negócio de exemplo “Order”
    dp marketplace order
  • Inicializando e acelerando implementações do microsserviço
    dp init

Após a criação do novo microsserviço entre na pasta do projeto “ms-order” e já poderá visualizar todas as implementações pelo Visual Studio Code conforme demonstrado no artigo relacionado a criação do primeiro microsserviço.

Após a conclusão é possivel executar o microsserviço. Depois finalize.
.\run.ps1 ou ./run.sh (Linux, macOS)

Aplicando configurações do Keycloak no microsserviço

As configurações de segurança na plataforma Devprime são aplicadas no Adapter de Security que no ambiente local fica no arquivo “src/App/appsettings.json” e nesse momento nós aplicaremos
os mesmos dados obitidos no portal ao Auth0.

Utilize os valores Domain, ClientId, ClientSecret obtidos em sua configuração no portal
do Auth0. Nesse cenário utilizaremos o EnableOIDC.

Apra pelo pelo Visual Studio Code:
code src/App/appsettings.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  "DevPrime_Security": {
    "Enable": "true",
    "Identity": {
      "Enable": "true",
      "Type": "auth0",
      "Domain": "https://dev-q5z4w4ipzhz581g3.us.auth0.com",
      "ClientId": "a15W9T9UzEA05hcRMM3x4ckfiEzD6CJo",
      "ClientSecret": "-hQtloE4YIF4oJD5cbhDrSVjbZ5IlF-x-UPgeTUZLZArxTRcyHwff6eu5b4IpkHZ",
      "EnableOIDC": "true",
      "AuthenticationScheme": "Auth0",
      "LogoutUri": "https://localhost:5001",
      "Scopes": "openid;email"
    }
  },

Criando um interface web para utilizar no exemplo

Adicionando template Web para utilização na demonstração. Esse procedimento criará algumas páginas web para utilizarmos na demonstração.
dp add web login

Após executar teremos um novo endpoint chamado “/private” que já traz o atributo “Authorize” necessário para indicar que aquela url requer uma autenticação. O trecho do arquivo abaixo “src/Adapters/Web/Pages/Account.cs” demontra esse cenário
com as urls /private, /login e /logout.

Para visualizar pelo Visual Studio Code:
code src/Adapters/Web/Pages/Account.cs

 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
26
    public override void Endpoints(WebApplication app)
    {
        app.MapGet("/private", [Authorize]
        (ClaimsPrincipal user) =>
        {
            StringBuilder sb = new StringBuilder();
            foreach (var claim in user.Claims)
            {
                sb.Append($"{claim.Type}={claim.Value}{System.Environment.NewLine}");
            }
            return sb.ToString();
        });
        app.MapGet("/login", async (HttpContext http, string returnUrl) =>
        {
            if (string.IsNullOrWhiteSpace(returnUrl))
                returnUrl = "/";
            await http.ChallengeAsync(SecurityConfig.Identity.AuthenticationScheme, new AuthenticationProperties()
            {RedirectUri = returnUrl});
        });
        app.MapGet("/logout", [Authorize]
        async (HttpContext http) =>
        {
            await http.SignOutAsync(SecurityConfig.Identity.AuthenticationScheme, new AuthenticationProperties{RedirectUri = "/"});
            await http.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
        });
    }

Execute a aplicação e abra https://localhost:5001 para visualizar os novos links adicionados.

Próximos passos:

Você protegeu uma aplicação web utilizando o Keycloak e um microsserviço utilizando a plataforma Devprime. Parabéns🚀🚀🚀

Última modificação November 12, 2023 (8e3b4c7e)