Forums Neueste Beiträge
 

geschützer WebService

05/04/2010 - 19:11 von Peter Fleischer | Report spam
Hi @ll,
folgender Zustand:

WebSite mit Forms Authentifizierung;
Authentifizierung und Autorisierung mit Membership- und Role-Provider;
-> funktioniert super incl. User.IsInRole in WebPages.

Unterordner mit Webservice, der dem gleichen Schutz unterliegt.

Silverlight-Anwendung, die WebService nutzt.

Folgendes funktioniert wie erwartet nicht:

Website außerhalb der Forms Authentifizierung ruft Silverlight-Anwendung
auf, die geschützten WebService aufruft. Das funktioniert wie erwartet
nicht.

Folgendes funktioniert:

Website innerhalb der Forms Authentifizierung wird aufgerufen, Login wird
erfolgreich abgearbeitet, Silverlight wird gestartet, Silverlight kann
erfolgreich mit dem WebService arbeiten.

Folgendes Problem 1:

WebService kann trotz erfolgreicher Authentifizierung durch die Forms
Authentifizierung vor dem Silverlight-Start nicht auf die Autorisierung
zugreifen (IsInRole bringt immer False). Gibt es da irgendwo eine
Lösungsmöglichkeit?

Weiteres Problem 2:

Wenn der WebService geschützt ist, bringt der Test des Silverlight-Projektes
natürlich Fehler, wenn die Silverlight-Anwendung direkt (implizit) gestartet
wird. Gibt es da Ideen für Lösungen? Ich helfe mir jetzt mit dem
Überschreiben des EndPointes, wenn die Anwendung nicht in der IDE gestartet
wird. Vielleicht gibt es aber etwas besseres?

Vielen Dank

Viele Gruesse

Peter
 

Lesen sie die antworten

#1 Lutz Elßner
11/04/2010 - 10:46 | Warnen spam

Folgendes funktioniert:

Website innerhalb der Forms Authentifizierung wird aufgerufen, Login wird erfolgreich abgearbeitet, Silverlight wird gestartet,
Silverlight kann erfolgreich mit dem WebService arbeiten.

Folgendes Problem 1:

WebService kann trotz erfolgreicher Authentifizierung durch die Forms Authentifizierung vor dem Silverlight-Start nicht auf die
Autorisierung zugreifen (IsInRole bringt immer False). Gibt es da irgendwo eine Lösungsmöglichkeit?

Weiteres Problem 2:

Wenn der WebService geschützt ist, bringt der Test des Silverlight-Projektes natürlich Fehler, wenn die Silverlight-Anwendung
direkt (implizit) gestartet wird. Gibt es da Ideen für Lösungen?




Ich habe zwar keine Ahnung von Silverlight, aber Webservice mit Forms Authentication geschützt habe ich schon.

Die Forms Authentication ist nichts anderes als ein Cookie, das beim http Request mit geschickt wird, und vom Webserver
entschlüsselt werden kann.
Den Inhalt des Cookies (Ticket) kannst du mit folgendem Code auslesen:

If TypeOf Me.User.Identity Is FormsIdentity Then
With DirectCast(Me.User.Identity, FormsIdentity).Ticket
Me.mLog.WriteLine("Name " & .Name)
Me.mLog.WriteLine("IsPersistent " & .IsPersistent)
Me.mLog.WriteLine("IssueDate " & .IssueDate.ToString("dd.MM.yyyy HH:mm:ss.fffffff"))
Me.mLog.WriteLine("Expiration " & .Expiration)
Me.mLog.WriteLine("Expired " & .Expired)
Me.mLog.WriteLine("UserData " & .UserData)
Me.mLog.WriteLine("CookiePath " & .CookiePath)
Me.mLog.WriteLine("Version " & .Version)
End With
End If

Normalerweise ist so ein Cookie nicht persistent (lebt nur innerhalb einer Browser Instanz) und nur für 30 Minuten.

1)
Für die Authentifizietung brauchst du ein Cookie. Wenn das vorhanden ist (IsAuthenticated), dann brauchst du für IsInRole u.s.w.
natürlich die Membership Datenbank oder àhnliches. Wie man die im Webservice aktiviert, weiß ich nicht. Kann man die Membership
Controls auch in einen Webservice "reinschieben"? Ich habe bisher darauf verzichtet, und würde wahrscheinlich die Datenbank Abfragen
lieber selbst programmieren.

2)
Wenn du Silverlight direkt startest, hast du also keine Möglichkeit, das Login abzuarbeiten?
Dagegen könnte ein persistentes Cookie, das auf der Festplatte gespeichert ist, und noch nicht expired ist, helfen.
Oder ein Login davor schalten, ich weiß nicht ob das Silverlight selber kann.

Lutz

Ähnliche fragen