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 Keycloak 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.

Para avançar nesse cenário é fundamental ter uma instância do Keycloak e seguir os passos conforme instruções abaixo:

  1. Crie uma instância do Keycloak seguindo os procimentos indicados.

  2. Instale o Devprime CLI.

  3. Criando um microservico para uso na demonstração “ms-sec-order”
    dp new ms-order --state mongodb --stream rabbitmq --marketplace order --init

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

  5. 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 “code src/App/appsettings.json” demontra esse cenário
com as urls /private, /login e /logout.

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

 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);
        });
    }
  1. Abra o arquivo de configurações e inclua no adapter de security os parametros do Keycloak obitidos no item 1 desse passo a passo alterando os itens “ClientID / ClientSecret / LogoutUri / Audience”

IMPORTANTE:
Coloque o mesmo valor do ClientID no campo Audience conforme exemplo abaixo e certifique
que o EnableOIDC está como “true”.

Procedimento para incluir configuração de segurança por OIDC:

a) Abra pelo Visual Studio Code
code src/App/appsettings.json

b) Copie o código abaixo e coloque no appsettings.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
  "Devprime_Security": {
    "Enable": "true",
    "Identity": {
      "Enable": "true",
      "Type": "keycloak",
      "Domain": "http://localhost:8080/realms/devprime",
      "ClientId": "myapp",
      "ClientSecret": "your-clien-secret",
      "EnableOIDC": "true",
      "AuthenticationScheme": "OpenIdConnect",
      "Audience":"myapp",
      "LogoutUri": "http://localhost:8080/auth/realms/devprime/protocol/openid-connect/logout?redirect_uri=https%3A%2F%2Flocalhost%3A5001",
      "Scopes": "openid;email"
    }
  },
  1. Execute a aplicação e abra https://localhost:5001 para visualizar os novos links adicionados.

  2. Acesse o link private e será direcionado para a autenticação
    Welcome Keycloak

  3. Efetue o login ou cadastre-se no Keycloak em “Register”.
    Welcome Keycloak

  4. Em caso de sucesso a página Web privada será liberada.
    Welcome Keycloak

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 September 2, 2023 (c87f0320)