Diferència entre revisions de la pàgina «Pyramid autenticació»
Línia 18: | Línia 18: | ||
=== Exercici === | === Exercici === | ||
− | Afegeix autenticació a la botiga "simpleshop" que hem fet amb anterioritat. | + | Afegeix autenticació a la botiga "simpleshop" que hem fet amb anterioritat a [[Python: Pyramid framework#Ex.1 Simple Shop|simpleshop]]. Els permisos seran: |
+ | * Benvinguda: pot entrar tothom | ||
+ | * Llista de productes: tothom | ||
+ | * Form comanda: només pot entrar els usuaris del grup clients. | ||
+ | * Llista de comandes: només pot entrar els usuaris del grup admin. | ||
+ | |||
Preneu l'[http://docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/wiki2/authorization.html exemple de URL_DISPATCHER] i dels Egipcis. En aquesta documentació s'expliquen les diferents passes: | Preneu l'[http://docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/wiki2/authorization.html exemple de URL_DISPATCHER] i dels Egipcis. En aquesta documentació s'expliquen les diferents passes: |
Revisió del 17:30, 19 abr 2013
Per poder seguir aquest article abans hauries d'haver-te mirat:
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
Exercici
Afegeix autenticació a la botiga "simpleshop" que hem fet amb anterioritat a simpleshop. Els permisos seran:
- Benvinguda: pot entrar tothom
- Llista de productes: tothom
- Form comanda: només pot entrar els usuaris del grup clients.
- Llista de comandes: només pot entrar els usuaris del grup admin.
Preneu l'exemple de URL_DISPATCHER i dels Egipcis. En aquesta documentació s'expliquen les diferents passes:
- Afegir usuaris i grups (security.py, nou mòdul).
- Afegir una ACL (models.py i __init__.py).
- Afegir polítiques: "authentication policy" i "authorization policy" (__init__.py).
- Afegir permisos a les views (views.py).
- Afegir pàgines de login i logout i arranjar-ho perquè es cridin quan no es tingui autorització.
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))',
- L'exemple del Pyramid utiltiza objectCategory enlloc del objectClass. A mi m'ha quedat així:
- 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: