Diferència entre revisions de la pàgina «Pyramid autenticació»
(Es crea la pàgina amb «Cal distingir entre: * Autenticació: determinar si l'usuari és qui diu ser. * Autorització: control de quins usuaris tenen accés a quines pàgines. <br> == Autentic…».) |
|||
(Hi ha 8 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
+ | Per poder seguir aquest article abans hauries d'haver-te mirat: | ||
+ | * [[Python: Pyramid framework]] | ||
+ | * [[Pyramid: arquitectura]] | ||
+ | |||
Cal distingir entre: | Cal distingir entre: | ||
* Autenticació: determinar si l'usuari és qui diu ser. | * Autenticació: determinar si l'usuari és qui diu ser. | ||
Línia 8: | Línia 12: | ||
El mòdul d'autenticació i de control de sessió el podem veure a la següent documentació: | 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 | * 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ó 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 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 | * '''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 [[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. | ||
+ | |||
+ | |||
+ | Algunes especificacions més: | ||
+ | * Afegir al registre de les comandes quin usuari les ha efectuat. | ||
+ | * En tot moment ha de veure's quin usuari està actiu i tenir la possibilitat de sortir (logout). | ||
+ | |||
+ | |||
+ | 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: | ||
+ | * 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ó. | ||
+ | |||
+ | |||
<br> | <br> | ||
− | |||
== Autenticació Pyramid amb LDAP == | == Autenticació Pyramid amb LDAP == | ||
La referència principal és aquesta: | La referència principal és aquesta: | ||
* http://docs.pylonsproject.org/projects/pyramid_ldap/en/latest/ | * http://docs.pylonsproject.org/projects/pyramid_ldap/en/latest/ | ||
+ | I el meu exemple: | ||
+ | * https://github.com/emieza/egipcis-ldap.git | ||
Abans cal preparar l'entorn: | Abans cal preparar l'entorn: | ||
Línia 23: | Línia 51: | ||
* Reconstruir l'aplicació:<pre>$ bin/buildout -v</pre> | * Reconstruir l'aplicació:<pre>$ bin/buildout -v</pre> | ||
− | ...i ara podem anar al tutorial i mirar-nos el codi: | + | ...i ara podem anar al tutorial i mirar-nos el codi. Mira't, però, les indicacions de més avall per fer l'adaptació: |
* http://docs.pylonsproject.org/projects/pyramid_ldap/en/latest/ | * http://docs.pylonsproject.org/projects/pyramid_ldap/en/latest/ | ||
+ | |||
+ | |||
+ | === 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í:<pre>filter_tmpl='(&(objectClass=groupOfNames)(member=%(userdn)s))',</pre> | ||
+ | # A la '''ACL del ''Root Factory''''' per permetre l'entrada al Faraó en la piràmide, el nom del grup ja no serà <code><strike>(Allow, 'group:farao', 'master')</strike></code> | ||
+ | #:...sinó que caldrà posar el DN complert del grup, en el meu cas:<pre>(Allow, 'cn=farao,ou=grups,dc=enric,dc=tk', 'master')</pre> | ||
+ | |||
+ | |||
<br> | <br> |
Revisió de 16:27, 28 abr 2014
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[modifica]
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[modifica]
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.
Algunes especificacions més:
- Afegir al registre de les comandes quin usuari les ha efectuat.
- En tot moment ha de veure's quin usuari està actiu i tenir la possibilitat de sortir (logout).
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[modifica]
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[modifica]
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[modifica]
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[modifica]
- 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: