Segnalazione #915
Segnalazione #789: Integrazione in octonet
Passare l'autenticazione da octonet a fuss-manager
10%
Associated revisions
Implemented auth forward view. refs: #915
In mock mode, use a auth_forward_secret. refs: #915
History
Updated by Enrico Zini about 5 years ago
Possiamo passare l'autenticazione usando la struttura User di fuss-manager encodata in un HMAC firmato da Django. Entrambi i siti devono condividere una secret key (diversa dalla secret key del sito) apposta per il passaggio dell'autenticazione.
Lato octonet, si può usare django.core.signing.dumps
(https://docs.djangoproject.com/en/2.2/topics/signing/) con la key
custom.
Lato fuss-manager server reimplementare django.core.signing.loads
(prendendo i pezzi che servono, se servono, dai sorgenti di django, ma comunque in buona parte è tutto basato sul modulo python hmac
https://docs.python.org/3.5/library/hmac.html)
Fuss-manager può ricevere questo token in una view di login alternativa, autenticare e decodificare il token, e inserire la struttura User risultante direttamente nella session senza avere bisogno nemmeno di toccare ldap.
Questo sistema di autenticazione in fuss-manager è disabilitato per default, e si abilita se è presente il secret di passaggio autenticazione nella configurazione.
In fase di deploy, sarà fuss-server
a impostare questo valore, per non averlo abilitato per default fuori da fuss.
Updated by Enrico Zini about 5 years ago
- Status changed from Nuovo to In elaborazione
- Assignee changed from Enrico Zini to Mark Caglienzi
- % Done changed from 0 to 10
Ho implementato una view di forwarding dell'autenticazione.
Per usarlo, si usa django.core.signing.dumps
per codificare e firmare una struttura che contiene i dati dell'utente e l'url a cui ridirigere dopo l'autenticazione.
Per esempio:
from django.core import signing token = signing.dumps({ "url": "/test", "user": { "name": "test", "id": 2, "display_name": "Test User", "groups": [{"name": "test", "id": 1}, {"name": "users", "id": 2}], }, }, key=self._app.config.auth_forward_secret, salt="fuss_manager.auth") # Visit "/auth-forward" + "?t=" + token
Ora rimane da provare il lato octonet: creare un iframe, generare il token in base ai dati dell'utente corrente, e aprire l'iframe sulla view di auth-forward
.
Mark, ti passo la palla, e rimango a disposizione per aiuto se serve
Updated by Enrico Zini about 5 years ago
Nota, il secret usato qui è diverso dal secret di django: serve aggiungere un nuovo secret nei setting da condividere con fuss-manager per firmare/autenticare i token di forward dell'autenticazione
Updated by Enrico Zini about 5 years ago
- Assignee changed from Mark Caglienzi to Elena Grandi
Ho fatto push della parte di embedding preparata al 99% da mark in octonet, e il forward dell'autenticazione sembra funzionare.
Manca un po' di code review, e manca decidere cosa consentire di fuss-manager agli utenti anonimi.
Passo a Elena per review e per discutere di questa cosa.
Updated by Enrico Zini about 5 years ago
Dopo aver sentito simone, guarda lui ora la situazione di quali utenti possano accedere a cosa e a cosa possono accedere gli anonimi
Updated by Elena Grandi about 5 years ago
- Status changed from In elaborazione to Chiuso
- Assignee changed from Elena Grandi to Enrico Zini
Mergiato in master.
Riguardo agli accessi per i vari utenti c'è #742
Make use of django.core.signing without access to django settings module. refs: #915