Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Login Form mit WebRequest ausfüllen und abschicken?
#coder#
myCSharp.de - Member

Avatar #avatar-3005.jpg


Dabei seit:
Beiträge: 395

Themenstarter:

Login Form mit WebRequest ausfüllen und abschicken?

beantworten | zitieren | melden

Hallo Leute, ich habe folgendes Problem, ich möchte mich von einer Webanwendung in eine andere einloggen, dieses soll automatisch ausgeführt werden, also Login Formular ausfüllen und abschicken.

Nun habe ich das Beispiel von unten mit dem WebRequest übernommen und getestet:
http://www.canaware.com/default.aspx?g=posts&t=569

Nun kann ich mit dem Request das Formular in meiner Webanwendung anzeigen, aber irgendwie werden die Credentials nicht richtig gesetzt bzw. versendet. Hab mich nun mit Fiddler durchgekämpft. Wenn ich mich nun an die Ziel Anwendung manuell einlogge bekomme ich die Zugriff darauf, wenn ich nun das Formular aus meiner Webanwendung abschicken, werde ich immer auf die Login.aspx umgeleitet, da ich nicht authentifiziert bin.

Jemand eine Idee woran es liegen kann?
Hat evtl. jemand eine Beispiel Lösung dafür?
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

das kann jetzt noch an verschiedenen Sachen hängen, z.B. Art des Requests (GET/POST),
Cookies, sonstige mit dem Login-Formular verschickte Daten, die möglicherweise auf Gültigkeit geprüft werden, oder HTTP-Headerfields wie "Referer".

Letztendlich kann Dir wahrscheinlich niemand eine konkrete Antwort geben, ohne die Seite mit dem Loginformular zu kennen.

Was Du tun musst:
Den Request an die Login-Form genau so nachbilden, wie er auch vom Browser beim Anmelden abgeschickt wird. Wie der Request genau aussieht, müsste Dir ja Fiddler verraten.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 2.891

beantworten | zitieren | melden

Tipp: WebClient mit HTTP-POST- und Cookie-Unterstützung
private Nachricht | Beiträge des Benutzers
#coder#
myCSharp.de - Member

Avatar #avatar-3005.jpg


Dabei seit:
Beiträge: 395

Themenstarter:

beantworten | zitieren | melden

@Marstein, kann ich den richtigen Request als Datei hinterlegen und später als Request abschicken, ist das möglich??
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 2.891

beantworten | zitieren | melden

Zitat von #coder#
kann ich den richtigen Request als Datei hinterlegen und später als Request abschicken, ist das möglich??
Wie genau sieht ein "richtiger Request" aus?
Requests kannst du schicken, wann du willst. Allerdings musst du evtl. auf Cookies und abgelaufene Sessions acht geben.

Gruß,
dN!3L
private Nachricht | Beiträge des Benutzers
#coder#
myCSharp.de - Member

Avatar #avatar-3005.jpg


Dabei seit:
Beiträge: 395

Themenstarter:

beantworten | zitieren | melden

Ich hab den richtigen Request aus Fiddler kopiert, also mit dem ganzen <html>.. code

Das mit Cookies könnte auch stimmen, evtl werden diese nicht lokal gesetzt. Nicht so einfach dies herauszufinden.
private Nachricht | Beiträge des Benutzers
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

beantworten | zitieren | melden

Je umfangreicher die Loginseite ist (JavaScript, AJAX, HTTPS, Cookie ect.), desto schwieriger ist es eine erfolgreiche Anmeldung via HttpWebRequest hinzubekommen.

Ohne die konkrete Seite können wir dir hier nicht weiterhelfen.

Möglich ist es aber definitiv immer, alles applikativ hinzubekommen, was auch mit dem Browser geht)

Notfalls mittels der IEXPLORE-Schnittstelle.
private Nachricht | Beiträge des Benutzers
#coder#
myCSharp.de - Member

Avatar #avatar-3005.jpg


Dabei seit:
Beiträge: 395

Themenstarter:

beantworten | zitieren | melden

Ich möchte mich in NopCommerce von Codeplex anmelden, habe diese bei mir lokal laufen: Im Backend möchte ich mich nun anmelden, hier gibt es die Seite unter ~/Administration/Login.aspx . Der komplette Request sieht wie folgt aus:
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="%2fnop%2fAdministration%2fDefault.aspx">here</a>.</h2>
</body></html>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
	Your store name. Login
</title><link href="../App_Themes/administration/styles.css" type="text/css" rel="stylesheet" /></head>
<body style="background-color: #efefef;">
    <form name="form1" method="post" action="Login.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="siehe unten" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<script src="/nop/WebResource.axd?d=_I2FrqfOM40snnjcITIUig2&amp;t=633942494308226263" type="text/javascript"></script>


<script src="http://localhost/nop/Scripts/admin.js" type="text/javascript"></script>
<script src="/nop/WebResource.axd?d=e4Wxd9XE6ayT1qguoH9O7ecv93YS8h8_ECLfTJm6Yf01&amp;t=633942494308226263" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</script>

<div>

	<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLgsq/XBwLssfBpAu/Mx9kGAqzxsN8NAqLY+psMfpJS3AmMrMuBiIfm6oEv06RCMbM=" />
</div>
    <div class="login-block">
        <table id="LoginForm" cellspacing="0" cellpadding="0" border="0" style="border-collapse:collapse;">
	<tr>
		<td>
                <table class="login-table-container">
                    <tbody>
                        <tr class="row">
                            <td class="item-name">
                                E-Mail Address:
                            </td>
                        </tr>
                        <tr class="row">
                            <td class="item-value">
                                <input name="LoginForm$UserName" type="text" value="admin@yourstore.com" id="LoginForm_UserName" class="adminInput" style="width: 200px;" />
                                <span id="LoginForm_UserNameOrEmailRequired" title="E-Mail is required" style="color:Red;visibility:hidden;">
                                            *
                                </span>
                            </td>
                        </tr>
                        <tr class="row">
                            <td class="item-name">
                                Password:
                            </td>
                        </tr>
                        <tr class="row">
                            <td class="item-value">
                                <input name="LoginForm$Password" type="password" maxlength="50" id="LoginForm_Password" class="adminInput" style="width: 200px;" />
                                <span id="LoginForm_PasswordRequired" title="Password is required" style="color:Red;visibility:hidden;">
                                            *
                                </span>
                            </td>
                        </tr>
                        <tr class="row">
                            <td class="item-value">
                                <input id="LoginForm_RememberMe" type="checkbox" name="LoginForm$RememberMe" checked="checked" /><label for="LoginForm_RememberMe">Remember me</label>
                            </td>
                        </tr>
                        <tr class="row">
                            <td class="message-error">
                                
                            </td>
                        </tr>
                        <tr class="row">
                            <td>
                                <div class="buttons">
                                    <input type="submit" name="LoginForm$LoginButton" value="Log in" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;LoginForm$LoginButton&quot;, &quot;&quot;, true, &quot;LoginForm&quot;, &quot;&quot;, false, false))" id="LoginForm_LoginButton" class="adminButtonBlue" />
                                </div>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </td>
	</tr>
</table>
    </div>
    
<script type="text/javascript">
//<![CDATA[
var Page_Validators =  new Array(document.getElementById("LoginForm_UserNameOrEmailRequired"), document.getElementById("LoginForm_PasswordRequired"));
//]]>
</script>

<script type="text/javascript">
//<![CDATA[
var LoginForm_UserNameOrEmailRequired = document.all ? document.all["LoginForm_UserNameOrEmailRequired"] : document.getElementById("LoginForm_UserNameOrEmailRequired");
LoginForm_UserNameOrEmailRequired.controltovalidate = "LoginForm_UserName";
LoginForm_UserNameOrEmailRequired.errormessage = "E-Mail is required";
LoginForm_UserNameOrEmailRequired.validationGroup = "LoginForm";
LoginForm_UserNameOrEmailRequired.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
LoginForm_UserNameOrEmailRequired.initialvalue = "";
var LoginForm_PasswordRequired = document.all ? document.all["LoginForm_PasswordRequired"] : document.getElementById("LoginForm_PasswordRequired");
LoginForm_PasswordRequired.controltovalidate = "LoginForm_Password";
LoginForm_PasswordRequired.errormessage = "Password is required";
LoginForm_PasswordRequired.validationGroup = "LoginForm";
LoginForm_PasswordRequired.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
LoginForm_PasswordRequired.initialvalue = "";
//]]>
</script>


<script type="text/javascript">
//<![CDATA[

var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
    ValidatorOnLoad();
}

function ValidatorOnSubmit() {
    if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
    }
    else {
        return true;
    }
}
        //]]>
</script>
</form>
</body>
</html>

Hier sind 2 Textboxen die ich mit den Standard Credentials übergebe, dieser Request wurde mit Fiddler abgefangen, anschließend wurde ich auf Default.aspx weitergeleitet.

Wenn ich nun mein Code die Daten übergebe, werde ich immer auf die Login.aspx weitergeleitet, wahrscheinlich da die Authentifizierung nicht geklappt hat. Es könnte an den Cookies liegen, welche nicht übertragen werden, da NopCommerce den Membership Provider verwendet.

PS: Value aus dem XML-Code
/wEPDwUJMjUzMjk5NDc2D2QWAgIDD2QWAgIBDzwrAAoBAA8WAh4IVXNlck5hbWUFE2FkbWluQHlvdXJzdG9yZS5jb21kFgJmD2QWCAIBDxYCHgRUZXh0BQ5FLU1haWwgQWRkcmVzc2QCAw8PFgIfAQUTYWRtaW5AeW91cnN0b3JlLmNvbWRkAgUPDxYGHgxFcnJvck1lc3NhZ2UFEkUtTWFpbCBpcyByZXF1aXJlZB4HVG9vbFRpcAUSRS1NYWlsIGlzIHJlcXVpcmVkHwEFUQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkAg0PEA8WAh4HQ2hlY2tlZGdkZGRkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBRRMb2dpbkZvcm0kUmVtZW1iZXJNZXo7xsvd8cwmaARVR4pm4T3Dg/+z
private Nachricht | Beiträge des Benutzers
h0scHberT
myCSharp.de - Member



Dabei seit:
Beiträge: 89

beantworten | zitieren | melden

probier doch mal http://watin.sourceforge.net/ aus.
Damit sollte es recht einfach klappen.

Gruß h0scHberT
private Nachricht | Beiträge des Benutzers
Djon
myCSharp.de - Member



Dabei seit:
Beiträge: 2

beantworten | zitieren | melden

Hallo!

Ich habe jetzt das gleiche Problem wie du. Hast du jetzt es gelöst bekommen und wenn ja, wie?

Vielen Dank im Voraus!

Mfg Djon
private Nachricht | Beiträge des Benutzers