Diferència entre revisions de la pàgina «Pyramid autenticació»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
 
(Hi ha 5 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 ==
Línia 49: Línia 75:
 
# 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).
 
# 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.
 
# 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>
+
# El '''filtre del config.ldap_set_groups_query''' ha de ser coherent amb la nostra estrctura de noms.
# 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>
+
#: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>
 
#:...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.



Autenticació Pyramid estàndard[modifica]

El mòdul d'autenticació i de control de sessió el podem veure a la següent documentació:


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]

  1. 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).
  2. Assegura't d'haver creat els grups i d'accedir-hi correctament pel DN complert.
  3. 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))',
  4. 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')