Autentificación Dokuwiki

Funcionamiento

Aquí se describe como se hace la autenticación cruzada del doku contra metaespacio. La manera es basta y un poco manual, pero para el escaso movimiento que tenemos posiblemente sea suficiente.

El metaespacio usa Django para almacenar las claves de forma cifrada. Django es muy dinámico en los algoritmos que usa para cifrar. Tiene una batería de algoritmos, y escoge el mejor posible. Incluso, cuando se inicia sesión y se tiene la clave guardada en un algoritmo inferior, django actualiza a algoritmos superiores.

Dokuwiki soporta django passwords en version sha2 y md5sum. Si las claves estuvieran en este formato, resulta que doku para autenticar, mira en el fichero conf/auth.users.php el que existan lineas de la forma:

amd77:$1$Z27c31J5$aUL1k1fdgQQfPFccg.2t21:Alberto Morales:amd77kk@kreitek.kk.org:admin,user

donde, separados por “:” aparecen por orden:

username:hash$de$la$passwd$con$su$salt:Nombre Apellidos:email@example.com:grupos,separados,por,comas

Y comprueba el user-pass introducido con estos hashes. Pero actualmente django cifra usando pbkdf2 con 20.000 iteraciones. Por tanto hay que agregar dicho soporte a doku.

Modificaciones en el doku original

Solamente se han agregado cosas al fichero inc/PassHash.class.php. Se ha definido un nuevo tipo de hash y un nuevo método de la clase implementando la funcion pbkdf2.

Resulta que esta función existe en php (hash_pbkdf2 pero solo a partir de php5.5. Para versiones anteriores, se puede encontrar esta version https://github.com/defuse/password-hashing/blob/master/PasswordHash.php escrita en php nativo, que es lo que hemos usado, puesto que php 5.5 no está tan extendido aún.

Este es el patch. passhash_patch.txt. No está para un pull request porque tiene el algoritmo sha256 hardcoded y porque no soporta php5.5. Si estuviera, se podría hacer un pull request en dokuwiki y se quedarían contentos.

Fichero de contraseñas del meta al doku

Para generar el auth.users.php con las claves del metaespacio tenemos que hacer ejecutar el management command dump_passwd.py de la siguiente forma:

ssh servidor_del_metaespacio
cd /opt/metaespacio/metaespacio/
. virtualenv/bin/activate
./manage.py dump_passwd anden --dokuwiki > /tmp/auth.users.php
# copiar el fichero al ftp de doku carpeta conf
rm /tmp/auth.users.php

La opcion –dokuwiki genera las cabeceras de php necesarias para que el fichero se asemeje con el fichero original.

Habría que ejecutar este procedimiento de vez en cuando, o cuando entren nuevos usuarios, o hayan cambiado de contraseña.

Nota importante: en el metaespacio hay usuarios que han escrito sus usuarios de inicio de sesión con alguna letra mayúscula. En el dokuwiki TODO ES MINUSCULA. Tal vez convendría poner un validador en el metaespacio para que no deje poner mayúsculas o qué minusculice, y así no tener divergencias.