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?
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
@Marstein, kann ich den richtigen Request als Datei hinterlegen und später als Request abschicken, ist das möglich??
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
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.
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.
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&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&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("LoginForm$LoginButton", "", true, "LoginForm", "", 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
probier doch mal http://watin.sourceforge.net/ aus.
Damit sollte es recht einfach klappen.
Gruß h0scHberT
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