21 messaggi dal 17 novembre 2006
Salve a tutti,
ho un controllo webbrowser dove vorrei vengano inviati dei dati in post.
Mi serve per fare il login sul mio sito. Su altre pagine non ho problemi,
ma sulla pagina aspx mi da un errore.
Credo dipenda dal fatto che non invio il campo hidden viewstate.
Qualcuno ha dei suggerimenti?

Dim urlString As String = "http://miosito.it/IdentificaIntranet.aspx"
Dim targetFrame As String = Nothing
Dim encoderAs System.Text.UTF8Encoding = New System.Text.UTF8Encoding
Dim DatiPost As Byte() = encoder.GetBytes("txtUid=miousername&txtPwd=miapassword")
Dim additionalHeaders As String = "Content-Type: application/x-www-form-urlencoded" + Chr(10) + Chr(13)
WebBrowser1.Navigate(urlString, targetFrame, DatiPost, additionalHeaders)
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Bisognerebbe dare un'occhiata all'errore che ti restituisce la pagina ASPX. A naso non sembra che ci siano problemi nel tuo codice: in un esempio ho visto che anziché usare l'encoder UTF8 usano l'encoder ASCII: hai per caso provato ad utilizzarlo?

Ciao.

.:. Marcello Rutter .:.
21 messaggi dal 17 novembre 2006
Inanzitutto grazie per la risposta.
Non mi da nessun errore.
Se invece prendo il viewstate dal codice html della pagina prima del login e lo passo assieme agli altri dati mi esce un errore (di sicurezza credo),
Con riferimento alla funzione ClientScriptManager.

Domanda di riserva. E possibile generare un viewstate per il controllo webbrovser prima che esso carichi la pagina?
501 messaggi dal 09 giugno 2006
Contributi
Generarlo non credo: prenderne il controllo forse ma dovrei verificare meglio il caso che hai segnalato (oppure prova a postare sul forum ASP NET 2.0 - magari trovi subito una risposta).

Ma a questo punto perché non intervieni direttamente nella pagina di login creando una version adattata per il logon diretto dal controllo WebBroswer?

Ultima cosa: hai la possibilità di debuggare la pagina ASPX? Potrebbe essere che la fase di autenticazione vada bene ma poi fallisca il "RedirectFromLoginPage".

Ciao.

.:. Marcello Rutter .:.
21 messaggi dal 17 novembre 2006
Non posso fare il debug nè modificare la pagina aspx, ma posso farmi dire com'è fatta. La pagina che riceve i dati effettuta il controllo e crea una session che poi fa un response.redirect ad una seconda pagina.

Ho capito che il viewstate che prendevo e passavo assieme agli altri valori non è valido perchè ha dei caratteri pericolosi...

Forse dovrei provare a decodificaer il viewstate, oppure fare esperimenti col machine.key, oppure ancora con l'authentication ticket... o forse sto impazzendo :)
501 messaggi dal 09 giugno 2006
Contributi
Ciao.

Il viewstate non è poi così complesso: si tratta di una lista di coppie chiave/valore codificata in BASE64.

Ho provato a cercare tra i miei appunti ed in effetti ho trovato qualcosa. In particolare ho trovato un esempio che avevo impiegato per fare un autologon ad un sito web .NET 1.0 da una normale pagina HTML.

Oltre al viewstate, a naso mi sa che mancano altri campi nascosti. Pur precisando che nel mio esempio usavo .NET 1.0 (come applicazione web) dovresti controllare: __EVENTTARGET, __EVENTARGUMENT. Inoltre i campi txtUid e txtPwd non sono chiamati esattamente in questo modo da .NET bensì sono preceduti da un identificativo interno del controllo (es. txtUid potrebbe chiamarsi, ai fini HTML, _ctl0_txtUid).

Proverei nel seguente modo: naviga la pagina di login usando il tuo browser (senza fare login ovviamente). Passa alla visualizzazione del sorgente HTML. A questo punto dovresti dare un'occhiata al codice HTML. La parte di tuo interesse (oltre ai tag HTML, HEAD, BODY, SCRIPT) e tutto ciò che è contenuto all'interno dei tag FORM.

Ti porto un banale esempio sempre riferito al login verso un'applicazione .NET 1.0.

<HTML>
  <HEAD>
    <title>MIO PORTALE</title>
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
    <link href="portale.css" type="text/css" rel="stylesheet"></link>
  </HEAD>
  <body leftmargin="0" bottommargin="0" rightmargin="0" topmargin="0" marginheight="0" marginwidth="0">
    <form name="Form1" method="post" action="http://il_mio_server_www/login.aspx" id="Form1">
<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" value="dDw3......" />

<script language="javascript">
<!--
  function __doPostBack(eventTarget, eventArgument) {
    var theform = document.Form1;
    theform.__EVENTTARGET.value = eventTarget;
    theform.__EVENTARGUMENT.value = eventArgument;
    theform.submit();
  }
// -->
</script>

<input name="_ctl0:txtUId" type="hidden" id="_ctl0_txtUId" value="il_mio_user_id"/>
<input name="_ctl0:txtPwd" type="hidden" id="_ctl0_txtPwd" value="la_mia_password"/>
<a id="_ctl0_lblSignin" tabindex="1" title="Esegue l'accesso con nome utente e password" href="javascript:{if (typeof(Page_ClientValidate) != 'function' ||  Page_ClientValidate()) __doPostBack('_ctl0:lblSignin','')} ">ESEGUI LOGIN</a>
</form>
</BODY>
</HTML>


Questo codice HTML è stato ottenuto seguendo le istruzioni che ti ho riportato e visualizza un semplice ANCHOR (tag <A>) cliccando il quale viene innescato il login alla pagina.

Proverei così! Se qualcosa cambia continua a postare che possiamo aggiustare il tiro.

Ciao.

.:. Marcello Rutter .:.
21 messaggi dal 17 novembre 2006
Grazie... ho fatto dei passi avanti!

Adesso riesco a fare il login passando _VIEWSTATE ed __EVENTVALIDATION vuoti, in più avevo ignorato l'input di un bottone (che però mi dicevano irrilevante dal punto di vista del controllo). L'unico problema adesso è l'eventValidation che deve essere false perchè altrimenti mi dà questo solito errore:

Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Adesso si tratta di un nuovo problema, cioè far dialogare client e (in qualche modo) server per fare in modo che si riconoscano. Se poi avete qualche info su machineKey e validationKey... è ben accetta. :) Grazie ancora

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.