ho mantenere un sito web ASP.NET MVC che utilizzaEmula ASP.NET cookie di autenticazione
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
di firmare gli utenti (che finiscono con un cookie di nome .ASPXAUTH
).
Il client desidera che aggiunga una funzione HTML a PDF, quindi impacchetta la libreria wkhtmltopdf e la chiama. Questo finisce per essere un comando che è simile al seguente:
wkhtmltopdf http://example.com/Foo/Edit/42 Foo.pdf
Tuttavia, che si traduce in fare un PDF della schermata di accesso, come il programma utente viene reindirizzato wkhtmltopdf in quanto non ha il cookie corretto.
va bene dal momento che, in base alla documentazione wkhtmltopdf, c'è un argomento come questo:
--cookie <name> <value> Set an additional cookie (repeatable)
Così ho modificare il comando di essere:
wkhtmltopdf --cookie .ASPXAUTH 91C0DE4C... http://example.com/Foo/Edit/42 Foo.pdf
Qualora il valore del cookie viene recuperato utilizzando Request.Cookie[".ASPXAUTH"].Value
.
Sfortunatamente, questo non sembra funzionare e non ho idea del perché. So che ASP.NET sta ricevendo il cookie perché quando interrompo la pagina di accesso dopo il reindirizzamento, posso vedere che è stato impostato. Quindi perché ASP.NET non accetta il mio cookie copiato?
Ecco il contenuto di una richiesta che ASP.NET consente (da Chrome):
GET http://localhost:50189/ReportingMonth/Edit/1193391 HTTP/1.1
Host: localhost:50189
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-CA,en;q=0.8,en-US;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: .ASPXAUTH=C8189041BF69FEF89A834B6F5035B786EC40145FFFBA3DBB6A04973BC58021C73D8D374E3577AA44BC26A784BC8A0C24831CF49FBD596BFFBA42C613E3C2C0C893D1587B7743D051643088BB8BAB667C047E0D1B84D7B76C4AADA7C62AB460D87C954BF9118BF5945E7D325D455CFD13A34C3DD5E597AFDF75D3C8EE76D8488B08ABBF6AE065B4C57CE47CB65AB17D65; language=en; ui-tabs-[object Object]=0
Ed ecco uno che reindirizza al login (da wkhtmltopdf):
GET http://localhost:50189/ReportingMonth/Edit/1193391 HTTP/1.1
Cookie: .ASPXAUTH=C8189041BF69FEF89A834B6F5035B786EC40145FFFBA3DBB6A04973BC58021C73D8D374E3577AA44BC26A784BC8A0C24831CF49FBD596BFFBA42C613E3C2C0C893D1587B7743D051643088BB8BAB667C047E0D1B84D7B76C4AADA7C62AB460D87C954BF9118BF5945E7D325D455CFD13A34C3DD5E597AFDF75D3C8EE76D8488B08ABBF6AE065B4C57CE47CB65AB17D65
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Qt/4.7.1 Safari/533.3
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Connection: Keep-Alive
Accept-Encoding: gzip
Accept-Language: en-US,*
Host: localhost:50189
La schifezza del browser in ASP.NET mi dà fastidio, non decidere le cose per un browser. Dovrebbe servire tutto esattamente come codificato per il browser e lasciare che il browser soffochi su di esso se quel browser è troppo stupido, e non ho speso lo sforzo per risolvere i problemi nel lato client del browser. –
Mi piacerebbe poterlo revocare più di una volta. Molto bene. –