Frage

Ich habe ein Java-Applet, das in einem Formularauthentifizierung aspx Seite läuft. In .NET 1.1-Version von meiner Seite, hat die Applet Zugriff auf das Session-Cookie und ist in der Lage, eine Datei vom Server, aber in der .NET 2.0-Version abrufen schlägt es zu authentifizieren.

Ich habe ein paar Forenbeiträge gesehen anderswo diesen Zustand, dass 2.0-Sets Cookies Httponly standardmäßig, aber die angegebenen Lösungen nicht für mich bisher gearbeitet. Ich habe auch gelesen, dass irgendwo 2.0 sein kann, basierend auf User-Agenten zu unterscheiden.

Hat jemand Erfahrung oder Einsicht in diesem?

War es hilfreich?

Lösung

Diese Frage ist alt, aber ich dachte, es wertvoll war hier die richtige Antwort zu haben.

Filip ist verwirrend serverseitige Java mit clientseitige Java. Er ist richtig, dass Sie nicht-Sitzungen zwischen zwei serverseitigen Plattformen wie Java (J2EE) und ASP.Net ohne Verwendung eines kundenspezifischen Ansatz teilen können.

Allerdings Applets sind clientseitige und deshalb sollen die Sitzungsinformationen der Host-Seite zugreifen kann. Das Problem ist, dass ASP.Net 2.0 den Httponly-Flag auf Session-Cookies hinzugefügt. Dieses Flag verhindert, dass JavaScript und Java-Applets aus diesen Cookies zugreifen.

Die Abhilfe ist die Httponly-Flag auf Session-Cookies zu deaktivieren. Während Sie es in der Konfiguration in neueren Versionen von ASP.Net tun können können, war in früheren Versionen die Lösung den folgenden Code in Global.asax-Datei 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;
            }
        }
    }
}
Hinweis

, dass auch bei diesem Update nicht alle Browser / O / Java Kombinationen Cookies zugreifen können. Ich bin der Erforschung zur Zeit ein Problem mit Session-Cookies auf Firefox 4.0.1 mit Java 1.6.0_13 unter Windows XP nicht zugegriffen werden kann.

Die Abhilfe ist es, den Ansatz Dr. Dad vorgeschlagen zu verwenden, wobei die Session-ID an das Applet als Parameter übergeben wird, und dann entweder wird in die Anfrage-URL eingebettet (erfordert URL-Sitzungen in der Server-Seite eingeschaltet wird Konfiguration) oder als manuell eingestellt Cookie gesendet.

Andere Tipps

Filip ist richtig und falsch, zumindest WRT auf Java und ASP.NET. Ein Applet kann durch Betrug Zugriff auf die ASP.NET-Sitzung erhalten. In meinem Fall haben wir die Session-ID als Parameter für das Applet, das das Applet dann als Cookie fügt in seinen Anfragen. Scheint ok zu arbeiten. (Ich verschlüsselte die Session-ID jenen bösen Hacker Folk zu vereiteln!)

Filip Antwort ist nicht ganz korrekt. Ich lief ein Programm, um die HTTP-Header auf meinem Arbeitsplatz schnuppern und das Java-Applet in der Tat, jedoch ist das ASP.NET-Authentifizierungsticket unter bestimmten Umständen -. Einfach nicht zuverlässig genug für meine Bedürfnisse

Schließlich habe ich eine Lösung für dieses Problem finden, aber es hat nicht ganz mein Problem zu lösen. Sie können einen Eintrag in der web.config in .NET 2.0 hinzuzufügen: <httpCookies httpOnlyCookies="false" />; aber dies nicht für alle meine Benutzer nicht funktioniert.

Die langfristige Lösung erwies sich als das Java-Applet zu modifizieren, so dass sie nichts von dem Web-Server abgerufen werden muss.

Ich bin mir bewusst, dass es eine sehr späte Antwort sein kann, aber ich kann Ihnen eine einfachere Lösung geben: - in der Regel, nicht immer, macht Applets starke Nutzung von HTML und JavaScript für ihre Schnittstellen und Interaktion. - Javascript ist im Browser ausgeführt. - Ajax Anrufe werden vom Browser aus. - Ajax Anrufe sind asynchron und kann leicht an eine Applets Logik integriert werden

.

kann man eine elegante Lösung zu integrieren Ajax Anrufe an einem Applet-Logik finden, an den Browser zum Delegieren der Sicherheit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top