Diferencia entre revisiones de «SIU-Arai/Integracion/Apache»

De SIU
Saltar a: navegación, buscar
(documentación inicial)
m
 
(No se muestran 4 ediciones intermedias del mismo usuario)
Línea 4: Línea 4:
  
 
En el caso de aplicaciones web que no tengan un mecanismo de autenticación y/o soporten solo la autenticación basic (vía htaccess), es posible integrar un módulo en Apache para que dicho recurso esté protegido contra el acceso, vía SAML. Esto módulo denominado [https://www.keycloak.org/docs/3.2/securing_apps/topics/saml/mod-auth-mellon.html Apache Mellon] permite que Apache se convierta en un proveedor de servicios o  '''SP''' de la plataforma, y soporte el login ''Single Sign On'' (e incluso ''Single Logout'').
 
En el caso de aplicaciones web que no tengan un mecanismo de autenticación y/o soporten solo la autenticación basic (vía htaccess), es posible integrar un módulo en Apache para que dicho recurso esté protegido contra el acceso, vía SAML. Esto módulo denominado [https://www.keycloak.org/docs/3.2/securing_apps/topics/saml/mod-auth-mellon.html Apache Mellon] permite que Apache se convierta en un proveedor de servicios o  '''SP''' de la plataforma, y soporte el login ''Single Sign On'' (e incluso ''Single Logout'').
 
 
 
== Requerimientos ==
 
== Requerimientos ==
 
Será necesario contar con:
 
Será necesario contar con:
Línea 11: Línea 9:
 
* la url del IdP, en este ejemplo <code><nowiki>https://idp.unx.edu.ar</nowiki></code>
 
* la url del IdP, en este ejemplo <code><nowiki>https://idp.unx.edu.ar</nowiki></code>
 
* el identificador disponible para la aplicación, en este ejemplo <code>unx-web_1</code>
 
* el identificador disponible para la aplicación, en este ejemplo <code>unx-web_1</code>
* la metadata del IdP, en este ejemplo el XML obtenido de la url <code><nowiki>https://idp.unx.edu.ar/saml2/idp/metadata.php</nowiki></code>
+
* la metadata del IdP, en este ejemplo el XML obtenido de la url <code><nowiki>https://idp.unx.edu.ar/saml2/idp/metadata.php</nowiki></code> y almacenada en <code>/etc/apache2/mellon/idp-metadata.xml</code>
 +
* los certificados para el SP, generados con el comando provisto por el módulo y almacenados en <code>/etc/apache2/mellon</code>
  
 
== Ajustes en SIU-Araí: Usuarios ==
 
== Ajustes en SIU-Araí: Usuarios ==
  
=== Creación de la aplicación Gitlab en Usuarios ===
+
=== Creación de la aplicación ''Apache'' en SIU-Araí: Usuarios ===
 
# Ir a Aplicaciones
 
# Ir a Aplicaciones
 
# Completar el formulario con los siguientes datos
 
# Completar el formulario con los siguientes datos
Línea 36: Línea 35:
 
== Ajustes en Apache ==
 
== Ajustes en Apache ==
  
=== Instalar módulo SAML ===
+
=== Instalar módulo Mellon ===
  
En este caso, se realiza la instalación en un S.O. Debian GNU/Linux versión 9. Para ello se instala el módulo de apache con el comando:
+
En este caso, se realiza la instalación en un S.O. Debian GNU/Linux versión 9. Para ello se instala el módulo de Apache con el comando:
  
 
  sudo apt install libapache2-mod-auth-mellon
 
  sudo apt install libapache2-mod-auth-mellon
Línea 44: Línea 43:
 
Luego de realizar la instalación, deberemos activar el módulo y recargar la configuración de Apache para que tome los cambios.
 
Luego de realizar la instalación, deberemos activar el módulo y recargar la configuración de Apache para que tome los cambios.
  
 +
sudo a2enmod auth_mellon authn_core authz_user
 +
 +
=== Crear los certificados para el SP ===
 +
El módulo '''Mellon''' requiere de un juego de certificados público/privado para funcionar. Se los puede generar con el siguiente comando:
 +
mellon_create_metadata.sh <nowiki>https://web.unx.edu.ar/mellon/metadata</nowiki> <nowiki>https://web.unx.edu.ar/mellon</nowiki>
 +
Esto nos creará 3 archivos que deberemos mover a <code>/etc/apache2/mellon</code>. Ignoramos el archivo .xml que sería el metadata del SP. Este se genera automáticamente a demanda.
 +
 +
=== Configurar autenticación SAML ===
 +
Se debe crear un VirtualHost que nos permita configurar el sitio web adecuadamente y proteger el acceso. Para ello, en este ejemplo creamos el archivo <code>/etc/apache2/sites-available/web.conf</code> con el siguiente contenido:
 +
 +
<source lang="ruby" enclose="div"> <VirtualHost *:80>
 +
        ServerName https://web.unx.edu.ar
 +
 +
        # punto de acceso protegido por autenticación
 +
        <Location />
 +
                Require valid-user
 +
                AuthType "Mellon"
 +
                MellonEnable "auth"
 +
                MellonVariable "nombre-cookie"
 +
                MellonSecureCookie On
 +
                MellonUser "uniqueIdentifier"
 +
                MellonSPPrivateKeyFile /etc/apache2/mellon/web.unx.edu.ar_mellon_metadata.key
 +
                MellonSPCertFile /etc/apache2/mellon/web.unx.edu.ar_mellon_metadata.cert
 +
                MellonIdPMetadataFile /etc/apache2/mellon/idp-metadata.xml
 +
                MellonDoNotVerifyLogoutSignature https://idp.unx.edu.ar/saml2/idp/metadata.php
 +
        </Location>
 +
 +
....
  
=== Activar autenticación SAML ===
+
# punto de acceso sin autenticacion
Se debe editar el archivo <code>/etc/gitlab/gitlab.rb</code>y activar el servicio omniauth para SAML y adecuar la configuración del IDP.<source lang="ruby" enclose="div"> gitlab_rails['omniauth_enabled'] = true
+
        <Location /sin-autenticacion>
 gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
+
                Satisfy Any
 gitlab_rails['omniauth_block_auto_created_users'] = false
+
                Allow from all
 gitlab_rails['omniauth_auto_link_saml_user'] = true 
+
                AuthType None
 gitlab_rails['omniauth_providers'] = [
+
                Require all granted
    {
+
        </Location>
      "name" => "saml",
+
</VirtualHost>
       args: {
+
</source> <blockquote>Nota: </blockquote>
               assertion_consumer_service_url: 'https://web.unx.edu.ar/users/auth/saml/callback',
+
# <code>ServerName</code>contiene el nombre del servidor con el protocolo https. Requerido para que mellon genere su metadatos correctamente.
               idp_cert: "-----BEGIN CERTIFICATE-----\n ...... \n-----END CERTIFICATE-----",
+
# <code>/sin-autenticacion</code> sería un punto de acceso que no requiere que se realice el login
               idp_sso_target_url: 'https://idp.unx.edu.ar/saml2/idp/SSOService.php',
 
               issuer: 'https://web.unx.edu.ar',
 
               name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
 
             }
 
    }
 
  ]
 
</source> <blockquote>Nota: <code>idp_cert</code>contiene el certificado público del IdP. Se debe concatenar los saltos de linea y expresarlos textualmente con <code>\n</code>.</blockquote>
 
  
 
=== Cargar nueva configuración ===
 
=== Cargar nueva configuración ===
Línea 69: Línea 89:
  
 
== Limitaciones conocidas ==
 
== Limitaciones conocidas ==
# Single Logout. Por defecto no tenemos un "link" para ello. Si la aplicación tiene un punto al cual redirigir para el cierre de sesión o si
+
# Single Logout. Por defecto no tenemos un "link" para ello. Si la aplicación tiene un punto al cual redirigir para el cierre de sesión o si se puede insertar un link html, se puede agregar [https://github.com/UNINETT/mod_auth_mellon#logging-out esta funcionalidad].
 +
# No se puede validar la signatura del response al '''logout'''. Por ello se desactiva la validación vía <code>MellonDoNotVerifyLogoutSignature</code>.

Revisión actual del 14:59 30 oct 2018

Siu-arai.png


Integrando Web Server Apache

En el caso de aplicaciones web que no tengan un mecanismo de autenticación y/o soporten solo la autenticación basic (vía htaccess), es posible integrar un módulo en Apache para que dicho recurso esté protegido contra el acceso, vía SAML. Esto módulo denominado Apache Mellon permite que Apache se convierta en un proveedor de servicios o SP de la plataforma, y soporte el login Single Sign On (e incluso Single Logout).

Requerimientos

Será necesario contar con:

  • la url del servidor Apache, en este ejemplo https://web.unx.edu.ar
  • la url del IdP, en este ejemplo https://idp.unx.edu.ar
  • el identificador disponible para la aplicación, en este ejemplo unx-web_1
  • la metadata del IdP, en este ejemplo el XML obtenido de la url https://idp.unx.edu.ar/saml2/idp/metadata.php y almacenada en /etc/apache2/mellon/idp-metadata.xml
  • los certificados para el SP, generados con el comando provisto por el módulo y almacenados en /etc/apache2/mellon

Ajustes en SIU-Araí: Usuarios

Creación de la aplicación Apache en SIU-Araí: Usuarios

  1. Ir a Aplicaciones
  2. Completar el formulario con los siguientes datos
    • appUniqueId: 'unx-web_1' (recordar es la misma que se pone en idp.yml)
    • url: 'https://web.unx.edu.ar'
    • etiqueta: 'Web app apache'
    • versión: 1
    • ícono: (elegir un logo .png, se mostrará en el menú)
  3. Opcional. Activar la opción filtrar por grupo y luego agregar un grupo existente, como devs al filtro. Esto hace que sólo la gente que pertenezca a este grupo pueda acceder a la aplicación.

Definición de Apache como SP

Se debe editar el archivo /ruta/arai-usuarios/config/idp.yml. Hay que tener cuidado al editar este archivo porque el formato yaml es estricto. Si se escapa un TAB se rompe.
custom:
    'https://web.unx.edu.ar'
: # esta clave es la que se pone el 'issuer' de la conf de gitlab
        AssertionConsumerService
: 'https://web.unx.edu.ar/users/auth/saml/callback'
        SingleLogoutService
: 'https://web.unx.edu.ar/mellon/logout'
        appUniqueId
: unx-web_1

Ajustes en Apache

Instalar módulo Mellon

En este caso, se realiza la instalación en un S.O. Debian GNU/Linux versión 9. Para ello se instala el módulo de Apache con el comando:

sudo apt install libapache2-mod-auth-mellon

Luego de realizar la instalación, deberemos activar el módulo y recargar la configuración de Apache para que tome los cambios.

sudo a2enmod auth_mellon authn_core authz_user

Crear los certificados para el SP

El módulo Mellon requiere de un juego de certificados público/privado para funcionar. Se los puede generar con el siguiente comando:

mellon_create_metadata.sh https://web.unx.edu.ar/mellon/metadata https://web.unx.edu.ar/mellon

Esto nos creará 3 archivos que deberemos mover a /etc/apache2/mellon. Ignoramos el archivo .xml que sería el metadata del SP. Este se genera automáticamente a demanda.

Configurar autenticación SAML

Se debe crear un VirtualHost que nos permita configurar el sitio web adecuadamente y proteger el acceso. Para ello, en este ejemplo creamos el archivo /etc/apache2/sites-available/web.conf con el siguiente contenido:

 <VirtualHost *:80>
        ServerName https://web.unx.edu.ar

        # punto de acceso protegido por autenticación
        <Location />
                Require valid-user
                AuthType "Mellon"
                MellonEnable "auth"
                MellonVariable "nombre-cookie"
                MellonSecureCookie On
                MellonUser "uniqueIdentifier"
                MellonSPPrivateKeyFile /etc/apache2/mellon/web.unx.edu.ar_mellon_metadata.key
                MellonSPCertFile /etc/apache2/mellon/web.unx.edu.ar_mellon_metadata.cert
                MellonIdPMetadataFile /etc/apache2/mellon/idp-metadata.xml
                MellonDoNotVerifyLogoutSignature https://idp.unx.edu.ar/saml2/idp/metadata.php
        </Location>

        ....

        # punto de acceso sin autenticacion
        <Location /sin-autenticacion>
                Satisfy Any
                Allow from all
                AuthType None
                Require all granted
        </Location>
</VirtualHost>
 
Nota:
  1. ServerNamecontiene el nombre del servidor con el protocolo https. Requerido para que mellon genere su metadatos correctamente.
  2. /sin-autenticacion sería un punto de acceso que no requiere que se realice el login

Cargar nueva configuración

Dependiendo del S.O. tendremos que reiniciar apache para levantar los cambios:

sudo service apache2 restart

Limitaciones conocidas

  1. Single Logout. Por defecto no tenemos un "link" para ello. Si la aplicación tiene un punto al cual redirigir para el cierre de sesión o si se puede insertar un link html, se puede agregar esta funcionalidad.
  2. No se puede validar la signatura del response al logout. Por ello se desactiva la validación vía MellonDoNotVerifyLogoutSignature.