Client Application Service mit Forms Authentication

01/08/2008 - 14:49 von Holger Seemüller | Report spam
Hallo,

ich sitze gerade vor einem Problem mit einer Windows Forms-Anwendung mit
aktivierten Client Application Service mit Forms Authentication.

Folgender Aufruf liefert eine IOException:

ClientFormsIdentity identity = Thread.CurrentPrincipal.Identity as
ClientFormsIdentity;
LogService logproxy = new LogService(); // mein Service
logproxy.CookieContainer = identity.AuthenticationCookies;
logproxy.Log("testnachricht", "dkfh", LogLevel.Information);

Die IOException lautet:
"Von der Übertragungsverbindung können keine Daten gelesen werden: Eine
vorhandene Verbindung wurde vom Remotehost geschlossen."
, was wohl soviel heißen soll, dass ich nicht authentifiziert bin.
Dies scheint auch tatsàchlich der Fall zu sein, da ich anscheinend keinen
AuthenticationCookie erhalte (identity.AuthenticationCookies.Count = 0!!).
Andererseits ist idenity.IsAuthenticated = true.

Auch die vorhergehende Anmeldung mittels Membership.ValidateUser(null, null)
ist erfolgreich.

Warum bin ich dann trotzdem nicht authentifiziert??

In einer anderen Anwendung, in der ich augenscheinlich *nichts* anders
mache, klappt der Aufruf und identity.AuthenticationCookies.Count ist auch
tatsàchlich 1.

Schönen Gruß und Dank,
Holger Seemüller
 

Lesen sie die antworten

#1 Holger Seemüller
02/08/2008 - 09:26 | Warnen spam
Ich habe das Problem nun eingrenzen können:

Ich habe mit einem Netzwerk-Sniffer den Verkehr zwischen Client und Service
mitgeschnitten und dabei bemerkt, dass überhaupt nichts übertragen wird.
Da unter Project Properties->Services->Advanced die Option "Save password
hash locally" aktiviert war, denke ich, dass er die Anmeldung stàndig
offline gemacht hat, obwohl eigentlich eine Verbindung besteht.

Leider àndert das Deaktivieren der Option nichts an der Tatsache, dass bei
der Anmeldung mittels Membership.ValidateUser(null, null) kein einziges
Paket ausgetauscht wird. Jetzt liefert ValidateUser aber tatsàchlich auch
false zurück, da er das Passwort jetzt ja nicht mehr offline vergleicht.

Gehe ich jedoch unter Project Properties->Settings auf "Load Web Settings"
und melde mich dort an, so sehe ich wunderschön die einzelnen Pakete mit
Username und Passwort etc.

Ich habe eine Form hinzugeügt, die
IClientFormsAuthenticationCredentialsProvider implementiert (s.u.) und diese
auch unter Properties->Services bei Credential provider eingetragen.

public ClientFormsAuthenticationCredentials GetCredentials()
{
if (this.ShowDialog() == DialogResult.OK)
{
return new
ClientFormsAuthenticationCredentials(this.textBox_Name.Text,
this.textBox_Passwort.Text, false);
}
else
{
return null;
}
}

Auch ein direkter Aufruf Membership.ValidateUser("Name", "Passwort") liefert
false.

Woran kann es liegen, dass beim Aufruf von Membership.ValidateUser keine
Verbindung zum WebService aufgebaut wird??
Vista Firewall hab ich schon ausgeschaltet, kein Erfolg!

Gruß,
Holger

"Holger Seemüller" schrieb im Newsbeitrag
news:%
Hallo,

ich sitze gerade vor einem Problem mit einer Windows Forms-Anwendung mit
aktivierten Client Application Service mit Forms Authentication.

Folgender Aufruf liefert eine IOException:

ClientFormsIdentity identity = Thread.CurrentPrincipal.Identity as
ClientFormsIdentity;
LogService logproxy = new LogService(); // mein Service
logproxy.CookieContainer = identity.AuthenticationCookies;
logproxy.Log("testnachricht", "dkfh", LogLevel.Information);

Die IOException lautet:
"Von der Übertragungsverbindung können keine Daten gelesen werden: Eine
vorhandene Verbindung wurde vom Remotehost geschlossen."
, was wohl soviel heißen soll, dass ich nicht authentifiziert bin.
Dies scheint auch tatsàchlich der Fall zu sein, da ich anscheinend keinen
AuthenticationCookie erhalte (identity.AuthenticationCookies.Count = 0!!).
Andererseits ist idenity.IsAuthenticated = true.

Auch die vorhergehende Anmeldung mittels Membership.ValidateUser(null,
null) ist erfolgreich.

Warum bin ich dann trotzdem nicht authentifiziert??

In einer anderen Anwendung, in der ich augenscheinlich *nichts* anders
mache, klappt der Aufruf und identity.AuthenticationCookies.Count ist auch
tatsàchlich 1.

Schönen Gruß und Dank,
Holger Seemüller

Ähnliche fragen