Newsgroup: it.comp.os.linux.sys
Titolo: url redirect basato su autenticazione

ho una home page con un drop-down menu, con dei nomi di team che 
reindirizzano a URL differenti e lì parte l'autenticazione. 
 
Senonché, nonostante l'applicazione sia per uso interno, il capo mi dice 
che non gli sta bene, perché espongo i nomi dei team e creo un piccolo 
problema di sicurezza. 
E mi dice che vorrebbe redirigere la URL in base al gruppo al quale 
appartiene il nome utente che viene fornito.
 
PROBLEMA: 
l'applicazione l'ho fatta io con cherrypy e cherrypy non supporta 
autenticazione LDAP (solo basic e digest). Il capo mi dice: "e che ci 
vuole ad aggiungerci tu una libreria, di qua, di là...". Non se ne parla 
nemmeno... troppo sbattimento. 
 
DOMANDA: 
SI PUO' FARE CON APACHE? Google non mi sta dando molto conforto :( 
 
 
-- 
Massimiliano Adamo

 SI PUO' FARE CON APACHE? Google non mi sta dando molto conforto :(
 
 
RewriteCond %{REMOTE_USER}
si avvicina un po', ma a me servono i gruppo. 
 
 
 
-- 
Massimiliano Adamo

appartiene il nome utente che viene fornito.
 
Deve essere fornito prima (dal browser).
 
Cosa c'è qui che manca?
 
http://tools.cherrypy.org/wiki/ExternalAuth
 
 
Leonardo
-- 
 
A terrible beauty is born.
                                     - W. B. Yeats, Easter 1916

 
 
mmhh... e dice (lui in quella stessa pagina): "IMHO delegating 
authentication is the Right Thing (TM) to do, since it also makes sense to 
use a reverse proxy (apache/lighttpd/squid) in front of CherryPy to deal 
with buffer overflows, malformed URLs and other nasty things. "
 
 
Cosa ho fatto io: 
- il reverse proxy apache gestisce l'autenticazione LDAP di utente pippo.
- dopo l'autenticazione, apache fornisce un header custom al backend 
cherrypy, che si chiama "ldapuser" e gli assegna il valore pippo. 
- il backend interroga LDAP per verificare a quali gruppi appartiene pippo 
e crea una lista python. 
- se la lista è vuota, non puoi accedere ad alcuna applicazione e ti 
spernacchia con un vago "Ops! o non sei autorizzato o la url che hai 
inserito non è valida". 
- se ci sono elementi nella lista, la pagina viene create dinamicamente ed 
il drop-down menù contiene gli elementi della lista. 
- se fai il furbetto e provi a manipolare la url del browser per scrivere 
la url di un gruppo per il quale non sei autorizzato, parte una lookup che 
verifica se appartieni a quel gruppo. Se non appartieni al gruppo di 
spernacchia come sopra. 
 
Non è molto ottimizzato, perché ci sono un paio di lookup su LDAP più del 
giusto (ci sono diversi motivi per cui ho dovuto fare così e non 
altrimenti), ma me ne frego, perché non è una applicazione che viene usata 
intensivamente. La app serve a fare il browsing via sftp (paramiko) dei 
dati per i backup off-site di ciascun team. Attraversa le directory, poi 
selezioni un file, lo scarica, lancia la decriptazione e ti invia un mail 
con l'esito. 
 
-- 
Massimiliano Adamo

Il Fri, 08 Apr 2016 18:07:41 +0000, Max_Adamo ha scritto:
 
[CUT]
 
P.S.: devo ancora verificare la questione dell'header dal punto di vista 
della sicurezza, perché in teoria qualcuno potrebbe inviare un header 
modificato dal browser (devo vedere bene il funzionamento del reverse proxy 
http, per capire se sostituisce header inviati dal browser).
Tuttavia, il nome dell'header può essere spoofato solo sul server stesso, 
nella connessione tra il proxy ed il backend sul localhost e lo posso 
customizzare come se fosse una password.... ma è anche vero, che 
quell'header dovrò memorizzarlo su git, perché fornisco le configurazioni 
tramite puppet/salt. 
 
 
-- 
Massimiliano Adamo

 
http://tools.cherrypy.org/wiki/ExternalAuth
 
 
adesso ci ho guardato un po' meglio.
 
questo link, non fa parte della documentazione ufficiale più recente e 
dice (IMO) corbellerie a ruota libera. La documentazione ufficiale dice 
testualmente che Cherrypy supporta basic e digest: 
CherryPy provides support for two very simple authentication mechanisms, 
both described in RFC 2617: Basic and Digest. They are most commonly known 
to trigger a browser’s popup asking users their name and password.W
 
Quel link dice invece:
"I've been wondering if CherryPy is the right place for doing 
authorization"
Ma che cavolo vuol dire? L'autenticazione LDAP è supportata da Java, PHP, 
Python Flask, Ruby Rails, Django. Se Cherrypy non supporta LDAP è 
evidentemente un problema di Cherrypy e non del mondo intero. 
 
Più giù ti dice di delegare l'autenticazione e ti mostra una 
configurazione per l'autenticazione Digest con lighthttpd e ti mostra il 
codice da usare con cherrypy:
 
hdr = cherrypy.request.headers['Authorization']
start = hdr.find('Digest username="')
 
QUESTO serve solo a verificare la presenza dell'header relativo alla 
autenticazione, fornito dal webserver, ma, non risolve in nessun modo il 
problema dei gruppi. 
 
-- 
Massimiliano Adamo