Teilen von ASP.NET-Sitzungscookies mit einem Java-Applet

Ich habe ein Java-Applet, das innerhalb einer Formular-authentifizierten aspx Seite läuft. In der .NET 1.1-Version meiner Site hat das Applet Zugriff auf das Sitzungscookie und kann eine Datei vom Server abrufen. In der .NET 2.0-Version kann es jedoch nicht authentifiziert werden.

Ich habe ein paar Forenbeiträge an anderer Stelle gesehen, die angeben, dass 2.0 standardmäßig Cookies zu HttpOnly setzt, aber die angegebenen Lösungen haben für mich noch nicht funktioniert. Ich habe auch irgendwo gelesen, dass 2.0 auf Basis von User-Agent diskriminierend sein könnte.

Hat jemand Erfahrung oder Einblick in diese?

3

4 Antworten

Diese Frage ist alt, aber ich hielt es für wertvoll, hier die richtige Antwort zu haben.

Filip verwechselt serverseitiges Java mit clientseitigem Java. Er ist richtig, dass Sie keine Sitzungen zwischen zwei serverseitigen Plattformen wie Java (J2EE) und ASP.Net gemeinsam nutzen können, ohne einen benutzerdefinierten Ansatz zu verwenden.

Applets sind jedoch clientseitig und sollten daher in der Lage sein, auf die Sitzungsinformationen der Hostseite zuzugreifen. Das Problem ist, dass ASP.Net 2.0 das HttpOnly-Flag in Sitzungscookies hinzugefügt hat. Diese Markierung verhindert, dass JavaScript- und Java-Applets auf diese Cookies zugreifen.

Die Problemumgehung besteht darin, das HttpOnly-Flag für Sitzungscookies zu deaktivieren. Während Sie es möglicherweise in der Konfiguration in neueren Versionen von ASP.Net tun können, war in früheren Versionen die Lösung, Ihrer Global.asax-Datei den folgenden Code hinzuzufügen:

protected void Application_EndRequest(object sender, EventArgs e)
{
    /**
    * @note Remove the HttpOnly attribute from session cookies, otherwise the 
    *      Java applet won't have access to the session. This solution taken
    *      from
    *      http://blogs.msdn.com/jorman/archive/2006/03/05/session-loss-after-migrating-to-asp-net-2-0.aspx
    *
    *      For more information on the HttpOnly attribute see:
    *
    *      http://msdn.microsoft.com/netframework/programming/breakingchanges/runtime/aspnet.aspx
    *      http://msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx
    */
    if (Response.Cookies.Count > 0)
    {
        foreach (string lName in Response.Cookies.AllKeys)
        {
            if (lName == FormsAuthentication.FormsCookieName || 
                lName.ToLower() == "asp.net_sessionid")
            {
                Response.Cookies[lName].HttpOnly = false;
            }
        }
    }
}

Beachten Sie, dass selbst mit diesem Fix nicht alle Browser/OS/Java-Kombinationen auf Cookies zugreifen können. Ich untersuche gerade ein Problem mit Session-Cookies, die unter Firefox 4.0.1 mit Java 1.6.0_13 unter Windows XP nicht verfügbar sind.

Die Problemumgehung besteht darin, den von Dr. Dad vorgeschlagenen Ansatz zu verwenden, bei dem die Sitzungs-ID als Parameter an das Applet übergeben wird und dann entweder in die Anforderungs-URL eingebettet wird (URL-Sitzungen müssen in der serverseitigen Konfiguration aktiviert werden) oder als manuell gesetztes Cookie gesendet

5
hinzugefügt

Filip ist sowohl korrekt als auch inkorrekt, zumindest gegenüber Java und ASP.NET. Ein Applet kann durch Cheaten auf die ASP.NET-Sitzung zugreifen. In meinem Fall fügten wir dem Applet die Session-ID als Parameter hinzu, die das Applet dann als Cookie in seine Anfragen hinzufügt. Scheint gut zu funktionieren. (Wir haben die Session-ID verschlüsselt, um diese fiesen Hacker zu vereiteln!)

1
hinzugefügt

Ich bin mir bewusst, dass es eine sehr späte Antwort sein kann, aber ich kann Ihnen eine einfachere Lösung geben: - Applets verwenden in der Regel nicht immer HTML und Javascript für ihre Schnittstellen und Interaktionen. - Javascript wird im Browser ausgeführt. - Ajax-Anrufe werden vom Browser ausgeführt. - Ajax-Aufrufe sind asynchron und können problemlos in eine Applets-Logik integriert werden.

Man kann eine elegante Lösung finden, die Ajax-Aufrufe in die Applet-Logik integriert und die Sicherheit an den Browser delegiert.

0
hinzugefügt

Filips Antwort ist nicht ganz korrekt. Ich habe ein Programm ausgeführt, um die HTTP-Header auf meiner Arbeitsstation zu erkennen, und das Java-Applet stellt tatsächlich unter bestimmten Umständen das ASP.NET-Authentifizierungsticket dar - nur nicht zuverlässig genug für meine Bedürfnisse.

Eventually I did find a solution to this, but it didn't entirely solve my problem. You can add an entry to the web.config in .NET 2.0: ; but this didn't work for all my users.

Die langfristige Lösung stellte sich heraus, dass das Java-Applet so geändert wurde, dass es nichts mehr vom Webserver abrufen musste.

0
hinzugefügt
JavaScript - Deutsche Gemeinschaft
JavaScript - Deutsche Gemeinschaft
3 der Teilnehmer

In dieser Gruppe sprechen wir über JavaScript.