martes, 7 de septiembre de 2021

CORS (Cross-Origin Resource Sharing) - Lecciones aprendidas

Estas son algunas lecciones aprendidas luego de haber tenido algunos problemas para implementar nuestras aplicaciones SPA (Angular - REST API) en nuestros servidores.

 ¿Qué es CORS?

Hay dos caminos al momento de habilitar CORS para un sitio web.

1 - A través de un Middleware dentro de la aplicación. Es conveniente hacerlo cuando no se tiene control sobre el servidor donde estará alojada la aplicación. En ese caso es la propia aplicación la que implementa el middleware que administra CORS.

Enable Cross-Origin Requests (CORS) in ASP.NET Core


2 - Configurando el servidor web (IIS). Hay que verificar que esté instalado el módulo general "CORS" y luego especificar los parámetros para cada sitio en el web.config. Esta es una opción mejor a la anterior porque permite modificar la configuración sin tocar el código pero requiere instalar el módulo general de CORS en el servidor.

IIS CORS module Configuration Reference 


Aprendiendo de nuestros errores:

- No sirve configurar HEADERS (de tipo "access-control-allow-origin") porque no funciona bien el "preflight".

- Por algún motivo en nuestro IIS dejó de funcionar el middleware del asp.net y tuvimos que configurar los sitios a través del web.config. Habría que probar desinstalando el CORS del servidor, tal vez así vuelve a funcionar el middleware.




viernes, 20 de agosto de 2021

Patrón CQRS - Command and Query Responsibility Segregation

Luego de haber transitado por el curso "Microservicios con ASP.NET 5, Angular, MongoDB, Docker" me quedó la idea de implementarlo en nuevos proyectos. 

Analizando el tema en más profundidad entiendo que se trata de un recurso aplicable a algunos casos en particular y no como estándar de arquitectura global.

Su implementación requiere esfuerzo adicional y se deberá evaluar la relación costo/beneficio en cada caso.

Referencias:

- What is the CQRS pattern?

- CQRS Journey

- CQRS Journey - Introducing the Command Query Responsibility Segregation Pattern

lunes, 12 de julio de 2021

No levanta GitLab Postgresql

- Para revisar el estado de los servicios en GitLab:

 sudo gitlab-ctl status

- Para ingresar con permisos de root dentro de la consola:

sudo -i

- Para buscar archivos:

locate -i postmaster.pid

- Ver el log de errores en: 

/var/opt/gitlab/postgresql --> current

- Para solucionar error: bogus data in lock file "postmaster.pid". Eliminar archivo:

rm /var/opt/gitlab/postgresql/data/postmaster.pid




viernes, 25 de junio de 2021

Content Security Policy (CSP)

Content-Security-Policy is the name of a HTTP response header that modern browsers use to enhance the security of the document (or web page). The Content-Security-Policy header allows you to restrict how resources such as JavaScript, CSS, or pretty much anything that the browser loads.

Although it is primarily used as a HTTP response header, you can also apply it via a meta tag.


Content Security Policy browser test


CSP Reporting API

Generic reporting framework which allows web developers to associate a set of named reporting endpoints with an origin. Various platform features can use these endpoints to deliver feature-specific reports in a consistent manner.


CSP Evaluator

CSP Evaluator allows developers and security experts to check if a Content Security Policy (CSP) serves as a strong mitigation against cross-site scripting attacks. It assists with the process of reviewing CSP policies, which is usually a manual task, and helps identify subtle CSP bypasses which undermine the value of a policy.

viernes, 4 de junio de 2021

Colas de mensajes para .Net Core

Al momento de escribir este artículo, MSMQ (Microsoft Message Queuing) y su librefía System.Messaging no está disponible para ejecutarse en entornos .Net Core 5. Se puede consumir en .Net Core 5 pero el sistema debería estar instalado en Windows. Ver MSMQ is dead.

Entonces, ¿cual es la mejor forma de implementar una cola de mensajes / tareas en .Net Core 5?

Opciones para analizar:

  1. RabbitMQ - AMQP (Advanced Message Queuing Protocol)
  2. Apache Kafka - ¿Qué es Apache Kafka?  (Linux) - Apache Kafka
  3. NServiceBus - A simple explanation of NServiceBus and why you need it
  4. Kafka vs RabbitMQ


Ver documentos de Microsoft:


Conclusiones
Para comunicación entre microservicios se recomienda utilizar el protocolo AMQP. Es un protocolo abierto y probado funcionando hace largo tiempo. La implementación más exitosa es la de RabbitMQ que además también se puede instalar en Windows.

jueves, 27 de mayo de 2021

Comparaciones de esquemas con Visual Studio SQL Data Tools

Microsoft Visual Studio SQL Data Tools proporciona una funcionalidad que permite comparar la estructura de las tablas de la base de datos, los procedimientos almacenados, las vistas y otros objetos de la base de datos. 

Schema Comparisons using Visual Studio SQL Data Tools

miércoles, 26 de mayo de 2021

SQL Server - Extensiones y funcionalidades adicionales

Data Quality Services

SQL Server Data Quality Services (DQS) is a knowledge-driven data quality product. DQS enables you to build a knowledge base and use it to perform a variety of critical data quality tasks, including correction, enrichment, standardization, and de-duplication of your data. DQS enables you to perform data cleansing by using cloud-based reference data services provided by reference data providers. DQS also provides you with profiling that is integrated into its data-quality tasks, enabling you to analyze the integrity of your data.


Dynamic Data Masking - Enmascaramiento dinámico de datos (DDM)

Dynamic data masking (DDM) limits sensitive data exposure by masking it to non-privileged users. It can be used to greatly simplify the design and coding of security in your application.

Dynamic Data Masking