ShibbolethSP - Integración de una aplicación Python

Los pasos a continuación asumen que se trabaja en un ambiente con Debian 8 y Apache 2.4 junto con el módulo Shibboleth configurado como se mencionó en Instalación Shibboleth SP , incluyendo el mapeo de atributos del IdP de UdelaR.

Esta guía se realiza en el host <mihost-ejemplo.edu.uy>, se debe ajustar el nombre al que corresponda.

1. Instalaciones necesarias

Se debe instalar Python 2.7 junto con el pip y el módulo mod_wsgi necesario para la comunicación entre la aplicación Python y el Apache.

apt-get update
apt-get install python-pip libapache2-mod-wsgi

2. Configurar protección en Apache

Para configurar Apache para que proteja los prefijos /secure se debe agregar la siguiente directiva al VirtualHost correspondiente:

 1 <Location /secure>
2     AuthType shibboleth
3     ShibRequestSetting requireSession 1
4     require shib-session
5 </Location>
 

3. Crear una aplicación Python WSGI básica

En /var/www/wsgi-scripts crear el archivo test.wsgi con el siguiente contenido:

def application(environ, start_response):
    status = '200 OK'
    output = b'Hola ' + str(environ['udelarPersonNombre1']) + ', tu correo es: ' + str(environ['mail'])

    response_headers = [('Content-type', 'text/plain'),
                    ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

4. Alias para la aplicación

En el VirtualHost de Apache se debe mapear el alias para la aplicación WSGI indicando la siguiente directiva:

 1 WSGIScriptAlias /secure/test /var/www/wsgi-scripts/test.wsgi
 

############## AL PARECER ESTO NO ES NECESARIO ###############
Además se debe permitir el acceso al archivo WSGI de la aplicación mediante la siguiente directiva:

 1 <Directory /var/www/wsgi-scripts>
2     <Files test.wsgi>
3         Require all granted
4     </Files>
5 </Directory>
 

################## FIN NO ES NECESARIO ###################

Luego de realizados los cambios se debe reiniciar el Apache mediante

service apache2 restart

Hasta este punto el módulo WSGI estará corriendo de forma embebida en el proceso de Apache.

5. Cambiando a modo Daemon

Es recomendable utilizar el modo Daemon del módulo mod_wsgi en lugar del embebido, para esto se deben agregar las siguientes directivas en el VirtualHost:

 1 WSGIDaemonProcess test python-home=/usr/bin/python python-path=/var/www/wsgi-scripts
2 WSGIProcessGroup test
 

La primer directiva toma un nombre arbitrario para el proceso. Luego se debe indicar el Python home donde Apache encontrará todos los componentes necesarios para que corra la aplicación. En caso de utilizar un ambiente virtual se debe indicar el directorio base del mismo. Por último, se debe indicar el directorio base de nuestro proyecto Python.

La segunda directiva especifica el grupo del proceso, esta debe apuntar al mismo nombre que fue seleccionado en WSGIDaemonProcess.

Nuevamente, se debe reiniciar el Apache mediante:

service apache2 restart

6. Visualización

Finalmente, se debe acceder a <mihost-ejemplo.edu.uy>/secure/test para visualizar la respuesta de la aplicación en el navegador.

Referencias

http://modwsgi.readthedocs.io/en/develop/user-guides/quick-configuration-guide.html
https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-debian-8