NOTAS DE INSTALACION DEL MOD-PAPI

SSO apache module

(1 Oct 2010 - 3 May 2013)

ENLACES VARIADOS

NOTAS

  • ¡ATENCIÓN!: NUNCA activar las cachés en una zona protegida por el PAPI: se pueden llegar a cachear los cookies de validación, devolviendo a un usuario los cookies de otro (!). En concreto, asegurarse de que la aplicación NO pone la cabecera "Cache-Control" (p.e. "Cache-Control: max-age=259200, public").
  • A partir de la version 0.0.2-7 del modpapi_UV funcionan correctamente las variables PAPILcookTimeout (tiempo de inactividad antes de tener que renovar la sesión en el AS) y PAPILcookMaxTimeout (tiempo de trabajo máximo antes de tener que renovar la sesión en el AS). Observar que PAPILcookMaxTimeout por lógica debe ser siempre mucho mayor que PAPILcookTimeout. Por defecto ambos valores son 3600 sg. Por ello las configuraciones ejemplo más abajo han sido modificadas cambiando PAPILcookTimeout por PAPILcookMaxTimeout, lo cual es ahora la configuración recomendada.
  • A partir de la version 0.0.2-17 del modpapi_UV la BD del PAPI puede ser un directorio en vez de ser una DB SQLITE3. Ver más abajo.

EJEMPLO COMPLETO DE INSTALACION DE MODPAPI (POA directo al AS)

(Requiere alta en el AS)

Ficheros auxiliares

Hará falta crear una carpeta (usualmente /etc/apache2/PAPI) accesible EN ESCRITURA por el Apache que contenga (accesibles en sólo lectura):

drwxr-xr-x 2 www-data root /etc/apache2/PAPI/
-rw-r--r-- 1 root     root /etc/apache2/PAPI/image_ok.png
-rw-r--r-- 1 root     root /etc/apache2/PAPI/image_nok.png
-rw-r--r-- 1 root     root /etc/apache2/PAPI/UVAS_pubkey.pem

Las imágenes "image_ok.png" e "image_nok.png" son la imagen de "login OK" y "login FAILED" y las puedes descargar en los enlaces anteriores.

Y "UVAS_pubkey.pem" es la clave pública de nuestro servidor PAPI. Se te manda al mismo tiempo que se confirmemos el alta del cliente en nuestro AS.

La DB del PAPI

Al iniciar una sesión, en caso de ser necesario redirgirte al AS para autenticarte, el PAPI almacena en una DB LOCAL SQLITE3 las cabeceras y datos de formularios de la petición actual para recuperarlos al volver de la autenticación. Esta DB se localiza en el lugar especificado en la configuración; usualmente en /etc/apache2/PAPI/ (de ahí la necesidad del permiso de escritura). Si se prevee que vayan a haber muchas conexiones por segundo, se recomienda ubicarla en disco RAM (/dev/shm) pues en caso de reinicio de la máquina de todas formas se pierden las sesiones en curso de ser abiertas.

Desde la version 0.0.2-17 (17 Jun 2022) mod_papi soporta que la DB del PAPI esté en un directorio en vez de en una DB SQLITE3. En este caso mod_papi mantienea un fichero por sesión en curso de ser abierta en vez de varios registros en la DB SQLite3. El usar un directorio evita ciertos problemas que ocurren a veces con la concurrencia en la SQLite3 (locks, DB que no deja escribir). Para usarlo, definir "PAPIReqDB /dev/shm/serviceid.dir" (es decir especificar un valor de PAPIReqDB que termina en ".dir" en lugar de ".db") Mod_papi creará automáticamente el directorio si www-data tiene permiso para ello. El módulo efectúa automáticamente una limpieza periódica del directorio. Para que funcione, 1) NO usar PAPIReqDBPath e, importante, PAPIReqDB debe estar dentro del "location".

Fichero de configuración Apache

Ejemplo que protege la location "/papiprot" [el mod_papi NO protege directorios, sólo "locations"].

     
  # ---------------------------------------------------
  # 
  # mkdir /var/www/papiprot
  # cp /var/www/casprot/index.html /var/www/papiprot/
  # sce /var/www/papiprot/index.html
  # mkdir /var/www/papiprot/PAPI
  # touch /var/www/PAPI/cookie_handler.jpg
  #
  # mkdir /etc/apache2/PAPI
  # scp caja:/etc/apache2/PAPI/* /etc/apache2/PAPI/
  # chown www-data /etc/apache2/PAPI/
  # chown www-data /etc/apache2/PAPI/xxxxx.db 
  #
  # .... para compilar el modulo 
  # mkdir /u/soft/MOD_PAPI
  # cd /u/soft/MOD_PAPI
  # svn checkout https://forja.rediris.es/svn/modpapi
  # cd tags/version-0.2/
  # aptitude install libmcrypt-dev libcurl4-dev libglib2.0-dev 
  # aptitude install cmake cdbs apache2-prefork-dev
  # ( rm CMakeCache.txt )
  # dpkg-buildpackage -b
  # cd ..
  # .............................
  #
  # aptitude install libcurl3-gnutls libmcrypt4
  # dpkg -i libapache2-mod-papi_0.0.2-1_amd64.deb 
  # a2enmod papi
  # 
  # ---------------------------------------------------
  
  PAPILcookMaxTimeout 18000
  PAPIURLTimeout 1800

  # DEBE ser accesibles via web (el directorio debe estar
  # accesible para el apache, No necesariamente en el sitio
  # protegido, pero puede estar ahi). Es el modulo papi el que los 
  # lee y envia, pero no puede leerlos si el apache no le deja.
  PAPIAcceptFile   /etc/apache2/PAPI/image_ok.png
  PAPIRejectFile   /etc/apache2/PAPI/image_nok.png
  # NO necesario en la Version UV
  #<Directory /etc/apache2/PAPI>
  #  Order allow,deny
  #  Allow from all
  #</Directory>
  
  # www-data DEBE poder escribir
  PAPIReqDBPath /etc/apache2/PAPI/
  # Debe ser accesible por www-data y estar ahi la clave
  # del servidor.
  PAPIKeysPath /etc/apache2/PAPI/

  <Location /papiprot>
    #Options Indexes
    #Order allow,deny
    #Allow from all
    
    AuthType PAPI
    Require valid-user
    # Este nombre debe ser unico y el que le pones en la tabla del AS
    PAPIServiceID papiprot
    # Imprescindible si no es igual al ServerName!
    # Es el dominio en el que se ponen los Cookies!
    PAPIDomain baul.uv.es
    PAPIAS UVAS https://as.uv.es/cgi-bin/AuthServer Universitat de Valencia
    PAPIRemoteUserAttribute username
    # cat `find /etc/ -type f -print` | md5sum
    # No necesaria. Pero asi permanece entre arranques apache!
    PAPILkey  25b42021d604199dd07bd4de8e5c8b16
    
    # Esto es para que mande al AS si no esta autenticado
    PAPIWAYF built-in
    
    # cookie_handler debe existir, pero DEBE estar vacio (sino existe,
    # la image_ok se mezcla con el error apache, si no es vacio
    # se mezcla con el contenido (chapuza!)
    # DEBE estar en la zona protegida (para que papi lo pille)
    #
    # VERSION UV: no hace falta que el fichero exista
    # basta con que el URL definido en el AS CONTENGA PAPIAuthLocation
    # DEBE empezar con / solo si el Location no la tiene al final.
    # (lo concatena con el Location)
    PAPIAuthLocation /papiprot/PAPI/cookie_handler.jpg
    
    # Si la expresión regular "matchea" el URI la comprobación
    # PAPI no se efectúa y deja entrar sin más.
    # PAPIPassURLPattern "/img/|/index"

  </Location> 
  
  - Los errores los da en:
     tail -f /var/log/apache2/error.log
  

ACTIVACIÓN DE UN SERVICIO EN EL AS

Una vez configurado el cliente PAPI (POA directo al AS) hay que darlo de alta en el AS.

Desde finales de 2012 existe una herramienta web para que los administradores puedan realizar cómodamente el mantenimiento de la tabla del AS.

VARIABLES DE CONFIGURACION DE MODPAPI

(Tabla de equivalencias con las variables del módulo perl)

Only the next tags have been implemented, and theirs 
names have changed:

Old tag                                   New tag
---------------------------------------------------------
HKEY_File                                 Not implemented
LKEY_File                                 PAPILkey (1)
Service_ID                                PAPIServiceID
Accept_File                               PAPIAcceptFile
Reject_File                               PAPIRejectFile
Pubkeys_Path                              PAPIPubkeysPath
Domain                                    PAPIDomain
Auth_Location                             PAPIAuthLocation
Signoff_Location                          PAPISignoffLocation
Pass_URL_Pattern                          PAPIPassURLPattern
Lcook_Timeout                             PAPILcookTimeout
CRC_Timeout                               Not implemented
URL_Timeout                               PAPIURLTimeout
Max_TTL                                   PAPIMaxTTL
PAPI_AS                                   PAPIAS
PAPI_Filter                               PAPIFilter
Cookie_Reject                             PAPICookieReject
Hash_User_Data                            PAPIHashUserData
User_Data_Rewrite                         PAPIUserDataRewrite
Client_Address_In_Tokens                  PAPIClienteAddressInTokens
Attribute_Separator                       PAPIAttributeSeparator
Value_Separator                           PAPIValueSeparator
Max_Nonce_Errors                          Not implemented
Debug                                     Not implemented
PADATH_LAA_Handler                        Not implemented
PADATH_HDD_Handler                        Not implemented
PADATH_Institution_ID                     Not implemented
PADATH_Key                                Not implemented
PADATH_Permission_Set_Attribute           Not implemented
PADATH_User_Id_Attribute                  Not implemented
PADATH_AAP_TTL                            Not implemented
SPOCP_Server                              Not implemented
SPOCP_Action                              Not implemented
SPOCP_Accept_If_Down                      Not implemented
GPoA_URL                                  PAPIGPoAURL
Req_DB                                    PAPIReqDB
GPoA_Priv_Key                             PAPIGPoAPrivKey
GPoA_Rewrite                              PAPIRewrite
GPoA_Hash_User_Data                       PAPIHashUserData
Remote_URL                                Not implemented
Remote_Domain                             Not implemented
Local_IP_Address                          Not implemented
Proxy_Server                              Not implemented
No_XML                                    Not implemented
Rewrite_MIME_Types                        Not implemented
HTTP_Auth                                 Not implemented
Form_Processor                            Not implemented
PAPI_Redirect                             Not implemented
PAPI_Redirect_by_URL                      Not implemented
PAPI_POST_Redirect                        Not implemented
PAPI_Header_Redirect                      Not implemented
Rewrite_URL_Pattern                       Not implemented
Reject_URL_Pattern                        Not implemented
Eval_Proxy_Redirects                      Not implemented
Proxy_Chunk_Size                          Not implemented
Redirect_All                              Not implemented

PAPI_Main and PAPI_Local are not longer necessary. You can 
use the tags in the Server or Location sections of your config 
file.

(1) PAPILkey recives a key as parameter and not a file. If 
    you don't configure it, mod_papi will generate one 
    automatically every time you restart apache.
    
New tags
--------

PAPIReqDBPath
PAPIKeysPath
PAPIWAYF
PAPIRemoteUserAttribute
PAPILazySession
PAPILcookMaxTimeout
     

EJEMPLO DE CONFIGURACION DE UN POA-MODPAPI que usa el GPOA

(==== NO recomendada ni soportada en la UV ===)

Esta es la configuración más sencilla, pero no se tienen todas las funcionalidades deseadas.
NO requiere definir el PoA en el AS.
Ahorra dos redirecciones si ya está validado en el GPoA,
pero son dos redirecciones más si no lo está.
Se pueden pasar atributos desde el AS, pero son los que tiene definido el GPOA (el usuario, p.e.).
NO FUNCIONA EL LOGOUT (el AS no registra la conexión -no le llega- y el GPOA tampoco.

    # Crear /etc/apache2/PAPI/ con permisos de ESCRITURA para www-data
    # Copiar a este directorio la clave publica del GPoA, que
    # DEBE llamarse _GPoA_pubkey.pem
  
    PAPILcookMaxTimeout 18000
    PAPIURLTimeout 1800

    PAPIReqDBPath /etc/apache2/PAPI/
    PAPIKeysPath /etc/apache2/PAPI/

    <Location /papiprot/>

      AuthType PAPI
      Require valid-user
      PAPIServiceID papiprot
      # Imprescindible si no es igual al ServerName!
      PAPIDomain baul.uv.es
      
      # No necesaria. Pero asi permanece entre arranques apache!
      PAPILkey  25b42021d604199dd07bd4de8e5c8b16
      
      # ... Para usar el GPOA
      PAPIGPoAURL      https://gpoa.uv.es/papi/cookie_handler.jpg
      
      # VERSION UV: no hace falta que el fichero exista
      # basta con que el URL pedido CONTENGA PAPIAuthLocation
      # DEBE empezar con / solo si el Location no la tiene al final.
      # (lo concatena con el Location)
      PAPIAuthLocation PAPI/cookie_handler

    </Location> 

Universitat de Valencia

 PAPI-SSO (Single Sign On)