Páginas

2018/05/25

SyntaxHighlighter


Suelo utilizar este complemento para poder visualizar código formateado en este blog. El problema es que cada vez que cambio de Tema se desconfigura todo y tengo que volver a buscar información de cómo se instala.

Así pues para eso escribo esta entrada y los pasos a seguir son:

1) Ir a Tema | Editar HTML

2) Escribir estas líneas antes del </head>

<link href="https://agorbatchev.typepad.com/pub/sh/3_0_83/styles/shCore.css" rel="stylesheet" type="text/css"> 
<link ref="https://agorbatchev.typepad.com/pub/sh/3_0_83/styles/shThemeDefault.css" rel="stylesheet" type="text/css"> 

<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shCore.js" type="text/javascript"></script> 
<script rc="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushCSharp.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushCss.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushJava.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushJScript.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushPhp.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushPython.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushRuby.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushSql.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushVb.js" type="text/javascript"></script> 
<script src="https://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushXml.js" type="text/javascript"></script> 

<script type="text/javascript">
 SyntaxHighlighter.all();
</script>


Siendo el resultado:


 

 



 

 

 

 

 

 

 

 

 

 

 




2018/05/16

Autentificación y autorización en Apache (a grosso modo)

Autentificación en Apache2

Caso práctico: se quiere establecer seguridad para que solamente algunos usuarios puedan acceder a un fichero alojado en un servidor Apache2.

Antes de nada decir que las diferencias entre Autentificación/Autenticación, y Autorización son:

  • Autentificación: verificar si la persona o entidad que se intenta conectar o acceder a un sistema es quien dice ser.
  •  Autorización: acción por el que se concede permiso a una persona o entidad a realizar otras acciones (lectura, modificación, escritura…) sobre un recurso de un servidor.


Se pedía dos formas de acceder a la lectura de un fichero en el servidor:

     1) En forma de autentificación en el sitio web pasando nombre de usuario y password
     2) Verificar que la URL pasada para consultar el recurso posee un ‘token’ o clave en esta URL en forma de texto.



1)     Autentificación en web

Para este caso tenemos que hacer lo siguiente:

a)
            sudo htpasswd –c /etc/apache2/.htpasswd nombreusuario

A continuación nos pedirá el password y este se guardará en el archivo .htpasswd

Podemos verlo con el comando:

      cat /etc/apache2/.htpasswd

b)

      sudo vi /etc/apache2/sites-enabled/000-default.conf

Añadir:

<VirtualHost *:80>
<Directory "/var/www/html/mipagina/">
   AuthType Basic
   AuthName "Restricted Content"
   AuthUserFile /etc/apache2/.htpasswd
   Require valid-user
</Directory>
</VirtualHost>

Lo que aquí configuramos es la forma de autentificación y dónde están las contraseñas alojadas para poder validad el usuario

Luego reiniciar el servidor Apache:

sudo service apache2 restart

Si accedemos a la URL nos aparecerá la siguiente imagen de autentificación:



También decir que podríamos acceder de la siguiente forma para que se 'logueara' directamente:

http://userName:password@direccionIP/pagina.html




      2)      Autorización mediante una palabra pasada por parámetro a una URL

En este caso se pidió que se le pasará la palabra ‘token=nombreequipo’ del modo http://direccionIP/pagina.html?token=nombreequipo

      a)      Módulo rewrite

    Para esto utilicé el módulo rewrite que está incluido en  
    /etc/apache2/mods-available/rewrite.load

    Para activarlo hay que ejecutarlo siguiente:
   sudo a2enmod rewrite
   service apache2 restart

      b)      Fichero .htaccess

          Añadí el fichero .htaccess dentro de /var/www/html/miproyecto

     RewriteEngine On
     RewriteCond ${REQUEST_FILENAME} -f
     RewriteCond ${REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_URI} \.html$ [NC]
     RewriteCond %{QUERY_STRING} !^token=nombreequipo [NC]

     RewriteRule . /403.html

     [NC] es un flag que indica que puede escribirse tanto en mayúsculas como en mínusculas (No Case Sensitive, es decir, que no distinga mayúscula y minúsculas)

             La primera línea activa el módulo Rewrite, la segunda es que el fichero pasado en la url sea  efectivamente un fichero, la tercera es que no sea un directorio, la cuarta que la url acabe en .html, y la quinta línea, es que el parámetro pasado contenga la frase “token=nombreequipo”. Si alguna de estas condiciones no se cumplen, el servidor nos redirige a la página 403.html

             Para poder utilizar .htaccess hace falta establecer en apache2.conf dentro de la sección <Directory> la sentencia "AllowOverride All"
  

     <Directory /var/www/html/miproyecto/>
Options –Indexes
Options FollowSymLinks
AllowOverride All
Require all granted
     </Directory>

           Options –Indexes bloquea el listado de ficheros de la raíz cuando intentamos acceder al directorio padre del proyecto.

2018/05/10

Pasos para hacer un Upload de 100 Megabytes bajo Nginx y ASP.NET Core 2


Pasos para hacer un Upload de 100 Megabytes bajo Nginx y ASP.NET Core 2

(y que no nos salga el error "413 Payload Too Large" (Kestrel) o  "413 Request Entity Too Large" (Nginx) )


Paso 1: Modificar nuestro web.config

<configuration>
  <system.web>
     <httpRuntime maxRequestLength="102400" /><!-- 100 MB in kilobytes -->
  </system.web>
  <system.webServer>

   ...
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="102428800" /> <!--100 MB in bytes -->
     </requestFiltering>
  </security>

...
 </system.webServer>


Paso 2: Modificar nuestra configuración de Nginx

En mi caso tengo una configuración propia en /etc/nginx/sites-enabled/proyecto.conf
pero también es factible modificar /etc/nginx/nginx.conf

Añadiendo
client_max_body_size 100M; #si lo establecemos a 0 no hay límite.
dentro de la sección location / {} ,y server {..}, aunque también he leído que  haría falta en http {...} de nginx.conf

En mi caso yo lo he establecido en location y en server, y me ha funcionado.

Acordarse de luego hacer un nginx -s reload o service nginx reload


Paso 3: Modificar el comportamiento Kestrel

Este paso no aparece en todos los sitios y es esencial.

Nos vamos a Program.cs 

.UseKestrel(options=>
 {
   options.Limits.MaxRequestBodySize = 102428800; //100 Megas en bytes
 })





2018/04/25

Publicar un proyecto ASP.NET Core con todas sus dependencias

Si después de publicar un proyecto ASP.NET Core te han faltado librerías .dll que están reflejadas en el fichero proyecto.deps.json, y no quieres ir copiando una a una, tienes que añadir la siguiente línea a tu fichero .csproj del proyecto:

 <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  </PropertyGroup>


Enlace:
https://www.benday.com/2018/02/23/force-dotnet-publish-to-publish-dependencies-using-publishwithaspnetcoretargetmanifest/


2018/04/12

Error 404 después de publicar con ASP .NET Core

Si después de publicar, alojar todo correctamente en tu IIS y al acceder a tu web API no se muestra nada y compruebas que está devolviendo un error 404 (recurso no encontrado), comprueba que la cadena conexión a la base de datos es correcta y tiene los permisos adecuados.

En mi caso, la cadena de conexión que la tenía escrita en appsettings.json no le había incluído el usuario, despiste mío.

2018/03/23

Cómo publicar un proyecto web de ASP.Net Core 2 en Ubuntu

1) Estando en un directorio del proyecto bajo Windows, publicamos de esta forma:

    dotnet publish -r ubuntu.16.10-x64 -o C:\Proyectos\ProyectoPublish

    C:\Proyectos\ProyectoPublish es la ruta de destino donde publicaremos.


2) Copiamos la publicación y la movemos a la carpeta Ubuntu /var/www/ProyectoPublish


3) Ponemos en marcha el proyecto publicado:

  a) Dentro de la ruta donde está el proyecto publicado (/var/www/ProyectoPublish/), ejecutar

     dotnet nombreProyecto.dll
   
     (Si no tenemos dotnet instalado mirar la siguiente página https://docs.microsoft.com/es-es/dotnet/core/linux-prerequisites?tabs=netcore2x )
   
  b) Entrar en

        http://localhost:5000/

Primera toma de contacto con ASP.NET Core 2

Quisiera compartir algunos apuntes que he anotado a medida que avanzaba en mi primer proyecto con ASP .NET Core 2:

* Si queremos aumentar el tiempo que necesita una petición en su ejecución:

  Solución: Ir al web.config y modificar o añadir la propiedad requestTimeout. En el siguiente ejemplo hasta 10 minutos:



* Añadir funciones de logueo (registro en logs)

 
 Solución: en el web.config añadir:

 stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"

Importante: Los logs no se escriben si no existe la carpeta \logs . Hay que crear esta carpeta.


* Si se produce este error:
   
    This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
    aspnetcore-store-2.0.6.xml 



Se puede arreglar añadiendo esto en el archivo .csproj del proyecto
   


 * Si se produce este error:

Development environment should not be enabled in deployed applications ...   
   
    Debemos añadir estas líneas al web.config del proyecto publicado:

Esto ocurre porque la aplicación tiene algún error que necesita mostrar.

* Si se produce el siguiente error:

Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor'


Añadiremos en el fichero Startup.cs:


MsiInv o cómo obtener información del software instalado en tu ordenador (en Windows)

Pues como dice el título, si quieres saber realmente qué software tienes instalado en tu computadora con el sistema operativo Windows, recom...