Aplicación de la seguridad web

Aprenda a integrar el servicio de identidad de Keycloak en el endpoint web para el control de acceso en el microservicio desarrollado con la plataforma Devprime. Auth0 soporta OpenID Connect / OAuth 2.0 / JWT en la protección de páginas web y API’s.

Durante este escenario, usaremos el adaptador de seguridad de la pila de Devprime para habilitar la configuración de seguridad de modo que, cuando haya una solicitud de acceso, se requiera la autenticación del usuario de forma centralizada de Keycloak.

Lista de verificación y preparación del entorno inicial:

Creación de un microservicio para usar en el ejemplo

El primer paso es crear un nuevo microservicio que podamos usar como plantilla para publicar en el host. El nombre de este microservicio se establecerá en “ms-order”, como se muestra en el siguiente comando.

  • Creación del primer microservicio
    dp new ms-order --stream rabbitmq --state mongodb
  • Agregar un ejemplo de regla de negocio “Orden”
    dp marketplace order
  • Inicialización y aceleración de implementaciones de microservicios
    dp init

Después de la creación del nuevo microservicio, ingrese a la carpeta del proyecto “ms-order” y podrá ver todas las implementaciones por Visual Studio Code, como se muestra en el artículo relacionado con creación del primer microservicio.

Una vez completado, puede ejecutar el microservicio. Luego termine.
.\run.ps1 ou ./run.sh (Linux, macOS)

Aplicación de la configuración de capa de teclas en el microservicio

La configuración de seguridad en la plataforma Devprime se aplica en el Adaptador de Seguridad que en el entorno local se encuentra en el archivo “src/App/appsettings.json” y en ese punto aplicaremos
los mismos datos obtenidos en el portal a Auth0.

Use los valores Domain, ClientId, ClientSecret obtenidos en la configuración en el portal
de Auth0. En este escenario, usaremos EnableOIDC.

Por 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"
    }
  },

Creación de una interfaz web para usar en el ejemplo

Adición de una plantilla web para su uso en la demostración. Esto creará algunas páginas web para que las usemos en la demostración.
dp add web login

Después de ejecutarlo, tendremos un nuevo endpoint llamado “/private” que ya cuenta con el atributo “Authorize” necesario para indicar que esa url requiere autenticación. El extracto del siguiente archivo “src/Adapters/Web/Pages/Account.cs” muestra este escenario
con las direcciones URL /private, /login y /logout.

Para verlo desde 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);
        });
    }

Ejecute la aplicación y abra https://localhost:5001 para ver los nuevos vínculos agregados.

Próximos pasos:

Ha protegido una aplicación web con Keycloak y un microservicio con la plataforma Devprime. Felicidades🚀🚀🚀

Última modificación April 11, 2024 (cc33f7e6)