Blog

Bug su Chrome con l'autenticazione di asp.net


In caso di autenticazione che si passa fra i subdomini di un sito, che ha una autenticazione .net, chrome periodicamente perde i cookie. Vediamo la soluzione.
Purtroppo facendo questo lavoro (sviluppare software) ogni tanto capitano problemi che sembrano nascere dall'assurdo e a cui l'unica cosa da dire sarebbe : "Perché proprio a me?".

Ma fa parte di questo lavoro. Nella maggior parte dei casi il problema con cui ci si scontra è per colpa propria. Una banalità non considerata, una conoscenza del problema non corretta, uno sbagliato uso di una libreria. In qualche caso invece la colpa non è la propria, si deve subire il problema, e cercare di trovare un'alternativa. Questo perché le tecnologie che usiamo per sviluppare non sono a loro volta esenti da errori, bug e problemi.

Questo bug è stato per me uno dei problemi più rognosi da risolvere in carriera, ed essenzialmente per più motivi:
  • nessuna documentazione in proposito
  • alcune condizioni specifiche per realizzarsi
  • randomicità dell'apparizione del problema
  • difficoltà nella ripetizione per poter debuggare e porre delle correzioni
Le condizioni in cui si presentava il problema erano le seguenti:
  • Sito in HTTP ed autenticazione su dominio di terzo livello con HTTPS
  • Autenticazione standard .net con cookie di sessione criptato
  • Browser Chrome, con le versioni pubblicate negli ultimi mesi fino ad adesso
Quello che succedeva è che ad alcuni utenti, in maniera assolutamente randomica, l'autenticazione veniva persa subito dopo il login, e per motivi a me non conosciuti, era impossibile dopo quel momento far riconoscere più il cookie di sessione al browser, ne a farlo cancellare e ricreare. Tutto completamente bloccato. L'unica soluzione, ma inaccettabile, era cancellare tutti i cookie del browser dalle impostazioni dello stesso.

Bug Chrome
Bug di Chrome

La prima cosa che ho fatto è stato cercare su Google, ovviamente, ma non ho trovato nulla che facesse veramente al caso mio. Quello di più vicino che ho trovato sono stati due post sui forum di google. Questo e questo. In cui diversi utenti lamentano la perdita dei cookie e della sessione. Ed il suggerimento è di cancellare tutti i cookies dal browser. Ovviamente è inaccettabile dal punto di vista del sito. Ma per diverso tempo è stata l'unica soluzione che ho avuto in mano.

A questo punto non avendo alternative, ho provato rivedere tutto il codice, ho cercato di cancellare tutti i cookie prima di riautenticare, ho cambiato la logica di autenticazione. Il tutto molto frustrante, perché si doveva procedere alla cieca. Fai una modifica, la rilasci, aspetti due o tre settimane e vedi se qualcuno lamenta problemi e dopo ci riprovi.

Dopo mesi di prove, con qualche miglioramento, ma non una risoluzione completa, ho provato la logica di Sherlock Holmes: "Una volta eliminato l'impossibile, ciò che resta, per quanto improbabile, deve essere la verità."

Analizzando con fiddler gli header http che venivano passati da e per il browser, ho notato che il cookie di autenticazione criptato di .net aveva un nome un po' diverso da tutti quelli che vedevo. Si chiama .ASPXAUTH. Con il punto davanti. La scelta è sensata per evitare che un programmatore inavvertitamente scelga un nome che sovrascriva il cookie di autenticazione.

Una volta eliminato l'impossibile, ciò che resta, per quanto improbabile, deve essere la verità. Ma fosse che?
Un rapido giro in documentazione, e vedo come si cambia il nome del cookie su cui è memorizzata l'autenticazione. Scelgo un nome che non contenga il punto.

Rilascio.

Il problema ad ora, sembra essere risolto.

Obiettivamente un problema molto strano e rognoso. Non sono sicuro di tutte le condizioni per avere questo errore, se fosse il dominio di terzo livello, l'https o più probabilmente entrambe le cose. Data la scarsa ripetibilità, sarebbe molto lungo fare test per isolare completamente le cause di errore.

Certo che se uno volesse pensare male, potrebbe sembrare un dispettuccio verso Microsoft...., chi altri usa un punto all'inizio del nome di un cookie? :-)


Post correlati:

Copyrights © 2011-2019 Tutti i diritti riservati - by Ideativi Srl