Pyramid autenticació
Cal distingir entre:
- Autenticació: determinar si l'usuari és qui diu ser.
- Autorització: control de quins usuaris tenen accés a quines pàgines.
Contingut
Autenticació Pyramid estàndard
El mòdul d'autenticació i de control de sessió el podem veure a la següent documentació:
- Referència: http://docs.pylonsproject.org/projects/pyramid/en/latest/api/authentication.html
- Exemple versió URL_DISPATCHER (utilitzarem aquest): http://docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/wiki2/authorization.html
- Exemple versió TRAVERSAL (si utilitzem ZODB): http://docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/wiki/authorization.html
- Exemple "Egipcis" el podeu descarregar a https://github.com/emieza/egipcis.git
Autenticació Pyramid amb LDAP
La referència principal és aquesta:
I el meu exemple:
Abans cal preparar l'entorn:
- Carregar les llibreries adequades (en Ubuntu):
# apt-get install libldap2-dev libsasl2-dev
- Afegir pyramid_ldap al nostre projecte buildout (buildout.cfg)
- Reconstruir l'aplicació:
$ bin/buildout -v
...i ara podem anar al tutorial i mirar-nos el codi. Mira't, però, les indicacions de més avall per fer l'adaptació:
Exemple Egipcis-LDAP
Trobareu l'exemple dels egipcis al meu repositori:
https://github.com/emieza/egipcis-ldap.git
Per tal que funcioni caldrà fer algunes modificacions del tutorial de Pyramid. Llegeix-les a continuació...
Sort!!!
Anonymous Bind
Pensa que el BIND (autenticació per administrar) es pot fer amb ANOYMOUS. Per fer això cal posar:
- bind=""
- passwd=""
...i no deixar-ho per defecte (sense indicar els atributs), ja que per defecte son None i això no serveix com a anonymous.
Amb això ja pots autenticar, al menys. Prova-ho abans de continuar...
Gestió dels grups a la ACL
- Primer de tot assegura't que has substituït la funció groupfinder de l'arxiu security.py per la nova versió que hi ha al tutorial de Pyramid (anem a buscar els grups al LDAP, no al array d'abans).
- Assegura't d'haver creat els grups i d'accedir-hi correctament pel DN complert.
- El filtre del config.ldap_set_groups_query ha de ser coherent amb la nostra estrctura de noms. #:L'exemple del Pyramid utiltiza objectCategory enlloc del objectClass. A mi m'ha quedat així:
filter_tmpl='(&(objectClass=groupOfNames)(member=%(userdn)s))',
- A la ACL del Root Factory per permetre l'entrada al Faraó en la piràmide, el nom del grup ja no serà
(Allow, 'group:farao', 'master')
- ...sinó que caldrà posar el DN complert del grup, en el meu cas:
(Allow, 'cn=farao,ou=grups,dc=enric,dc=tk', 'master')
- ...sinó que caldrà posar el DN complert del grup, en el meu cas: