Frage

Zunächst einmal, wenn es eine echte, offizielle Art und Weise des Habens flash / flex NetConnections die Session / Cookie Zustand der umgebenden Webseite an sich zu reißen, so dass, wenn der Benutzer bereits angemeldet hat, sie keine Anmeldeinformationen zur Verfügung stellen mußte gerade wieder eine AMF-Verbindung einzurichten, bitte mich jetzt stoppen und die offizielle Antwort senden.

Abgesehen davon, ich bin vorausgesetzt, es ist nicht, wie ich gesucht habe, und es scheint nicht zu existieren. Ich habe ein Mittel, dies zu tun ausgedacht, sondern will ein Feedback darüber, ob es sicher ist.

  1. eine Wrapper-Seite für ein Flash-Objekt Zugriff auf immer geht https zu sichern aufgrund django Middleware
  2. Wenn die Seite Ansicht in Django geladen wird, erstellt es ein „Sitzungs-Alias“ Objekt mit einem eindeutigen Schlüssel, dass Punkte auf die aktuelle Sitzung im Spiel (in denen jemand angeblich angemeldet)
  3. Das Sitzungs-Alias-Modell gespeichert wird, und dass Schlüssel in einem Cookie platziert, dessen Schlüssel ist eine weitere zufällige Zeichenfolge, nennen es randomcookie
  4. Die randomcookie Schlüsselname als Kontextvariable übergeben wird und geschrieben in den HTML-Code als Flash-Variablen in der swf
  5. Die swf wird auch nur über https
  6. geladen
  7. Die Flash-Anwendung verwendet ExternalInterface zum Aufruf java den Wert an dieser Stelle randomcookie zu packen, und löscht auch das Cookie
  8. Es erstellt dann eine NetConnection an einen sicheren Server https Lage, dass randomcookie als Argument übergibt (Daten, nicht in der URL) zu einem Login-using-Cookie rpc
  9. Auf der Seite Gateway, pyamf Blicke auf die Sitzungs-Alias ??und bekommt die Sitzung verweist er auf, und meldet den Benutzer auf dieser Grundlage (und löscht den Alias, damit es nicht wieder verwendet werden kann)
  10. (Und der Gateway Wunsch auch den Session-Cookie und session.session_key auf den bekannten Session-ID einstellen könnte, aber ich konnte lassen Sie es einen ganz neuen Sitzungsschlüssel macht ... Ich gehe davon aus, dass dies die Antwort beeinflussen sollte richtig so daß sie den richtigen Sitzungsschlüssel)
  11. An diesem Punkt der zurück Cookie-Werte auf der Flash-Seite sollte den NetConnection kleben, so dass weitere Anrufe authentifiziert werden (wenn eine Verbindung authentifiziert wird mit Benutzername und Passwort die normale Art und Weise, dies funktioniert auf jeden Fall, so dass ich denke, das ist ein sichere Wette, Prüfung wird in Kürze unter Beweis stellen oder diese zu widerlegen)

Also, das ist unsicher, oder wird richtig funktioniert? Soweit ich weiß, da die HTML-Seite gewährleistet ist ssl vorbei sein, sollten die Schlüssel und Cookie-Daten werden verschlüsselt und nicht stehlen-fähig. Dann sollte die Informationen darin sicher einmalig zu verwenden, wie im Grunde ein temporäres Passwort, geschickt wieder über ssl da das Gateway auch https ist. Danach ist mit dem normalen pyAMF System über https und nichts aus dem üblichen heraus zu tun.

War es hilfreich?

Lösung

Keine Antworten auf diesen so weit, so das Beste, was ich tun kann bestätigen, dass es in der Tat tut körperlich arbeiten. Einzelheiten dazu, wie Flex Builder einrichten, um HTML-Wrapper zu schreiben, die mit Django Seiten Vorlagen kommunizieren, finden Sie unter meine andere Post . Die oben ausgeführt wurde eine Kombination der oben genannten Verwendung plus:

Made a SessionAlias Modell:

class SessionAlias(models.Model):
  alias   = models.CharField( max_length=40, primary_key=True )
  session = models.ForeignKey( Session )
  created = models.DateTimeField( auto_now_add=True )

Flex verweist auf eine Django-Seite, die Lasten über eine Ansicht enthalten:

s = SessionAlias()
s.alias = SessionStore().session_key // generates new 40-char random
s.session = Session.objects.get( session_key=request.session.session_key )
s.save();
randomcookie = SessionStore().session_key // generates new 40-char random
kwargs['extra_context']['randomcookie'] = randomcookie
response = direct_to_template( request, **kwargs )
response.set_cookie( randomcookie, value=alias )

In dem Flex-HTML-Wrapper, wo randomcookie die Lage für den Alias ??zu sehen ist:

<param name="flashVars" value="randomcookie={{randomcookie}}" />

In applicationComplete, wo wir randomcookie und finden Sie den Alias ??erhalten, und melden Sie sich mit, dass:

var randomcookie:String = this.parameters["randomcookie"];
// randomcookie is something like "abc123"
var js:String = "function get_cookie(){return document.cookie;}";
var cookies:String = ExternalInterface.call(js).toString();
// cookies looks like "abc123=def456; sessionid=ghi789; ..."
var alias:String = // strip out the "def456"
mynetconnection.call( "loginByAlias", alias, successFunc, failureFunc );

Was wiederum Zugriff auf diese pyamf Gateway rpc:

from django.contrib.auth import SESSION_KEY, load_backend
from django.contrib.auth.models import User
from django.contrib import auth
from django.conf import settings
def loginByAlias( request, alias ):
  a = SessionAlias.objects.get( alias=alias )
  session_engine = __import__( settings.SESSION_ENGINE, {}, {}, [''] )
  session_wrapper = session_engine.SessionStore( a.session.session_key )
  user_id = session_wrapper.get( SESSION_KEY )
  user = User.objects.get( id=user_id )
  user.backend='django.contrib.auth.backends.ModelBackend'
  auth.login( request, user )
  a.delete()
  return whateverToFlash

Und an diesem Punkt, auf dem Flash / Flex-Seite, dass insbesondere mynetconnection behält sich das Session-Cookie Zustand, der Zukunft nennt solche machen kann, dass innerhalb des Gateway, request.user ist die ordnungsgemäß authentifizierte Benutzer, der in der ersten auf der Webseite angemeldet Platz.

Beachten Sie wieder, dass die Run / Debug-Einstellungen für flex https verwenden müssen, sowie die Gateway-Einstellungen für NetConnection. Und wenn diese Freigabe, muss ich, dass authentifizierte Benutzer bleiben sicher auf https.

Jede weitere Informationen von den Leuten geschätzt werden würde, vor allem, wenn es echte Rückmeldungen über die Sicherheitsaspekte dieser ...

Andere Tipps

IE geben keinen Zugriff auf diese Option in der lokalen Entwicklung, aber wenn Sie die SWF veröffentlichen und auf eine Domain, es sollte Pickup die Sitzung wie immer andere Browser. Verwenden Sie Firefox 3.6 auf Ihre Flex-Anwendungen vor Ort aufzubauen.

Getestet in IE8, Firefox einen pyamf Gateway auf Flex 3 mit NetConnection- verwenden. Die Gateway-Funktion wurde mit @login_required

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