2010-08-24 5 views
0

Tout d'abord, s'il y a un vrai moyen officiel d'avoir flash/flex NetConnection s usurper l'état de session/cookie de la page Web environnante, de sorte que si l'utilisateur est déjà connecté , ils n'ont pas besoin de fournir des identifiants à nouveau juste pour établir une connexion AMF, s'il vous plaît arrêtez-moi maintenant et postez la réponse officielle. Sauf ce que je suppose, il n'y a pas, comme je l'ai cherché et il semble n'existe pas. J'ai concocté un moyen de le faire, mais je voudrais savoir si c'est sécurisé.Flash + pyAMF + cookie session Django sécurité

  1. Accès à une enveloppe-page pour un objet flash sera toujours aller pour obtenir https en raison de django middleware
  2. Lorsque la vue de la page est chargée dans Django, il crée un objet « alias de session » avec une clé unique les points à la session en cours en jeu (où quelqu'un ostensiblement connecté)
  3. ce modèle d'alias de session est enregistrée, et que la clé est placée dans un cookie dont la clé est une autre chaîne aléatoire, appelez-randomcookie
  4. ce randomcookie nom de la clé est passé comme une variable de contexte et écrit dans le html comme un flashvar au swf
  5. Le swf est également chargé uniquement via https
  6. L'application flash utilise ExternalInterface pour appeler java pour saisir la valeur à cet endroit de randomcookie, et supprime également le cookie
  7. Il crée ensuite un NetConnection à un emplacement https serveur sécurisé, En passant ce randomcookie comme argument (données, pas dans l'url) à un rpc login-using-cookie
  8. Au niveau de la passerelle, pyamf recherche l'alias de session et obtient la session vers laquelle il pointe, et se connecte à l'utilisateur sur cela (et supprime l'alias, donc il ne peut pas être réutilisé)
  9. (Et la demande de passerelle pourrait également définir le cookie de session et session.session_key à la session connue ID de l'ion, mais je pourrais le laisser faire une toute nouvelle clé de session ... Je suppose que cela devrait affecter la réponse correctement afin qu'il contienne la clé de session correcte)
  10. À ce stade, les valeurs de cookie renvoyées sur le côté flash doit rester sur le NetConnection afin que d'autres appels soient authentifiés (si une connexion est authentifiée en utilisant un nom d'utilisateur et un mot de passe normalement, cela fonctionne, donc je pense que c'est une valeur sûre, le test le prouvera ou le réfutera)

Alors, est-ce dangereux, ou cela fonctionnera-t-il correctement? Pour autant que je sache, étant donné que la page html est garantie sur SSL, les données de clé et de cookie doivent être cryptées et ne peuvent pas être volées. Ensuite, les informations qui s'y trouvent devraient pouvoir être utilisées en toute sécurité en tant que mot de passe temporaire, envoyé à nouveau via SSL car la passerelle est également https. Après cela, il utilise le système pyAMF normal sur https et ne fait rien d'extraordinaire.

Répondre

0

Aucune réponse à ce sujet pour l'instant, donc le mieux que je peux faire est de confirmer que cela fonctionne physiquement. Pour plus de détails sur la configuration de Flex Builder pour écrire des wrappers html communiquant avec les modèles de pages Django, voir my other post.Ce qui précède a été effectuée en utilisant une combinaison de ce qui précède, plus:

Fait un modèle SessionAlias:

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

points de flexion vers une page Django qui se charge par l'intermédiaire d'un point de vue contenant:

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) 

Dans le flexible html-wrapper, où randomcookie est l'emplacement où rechercher l'alias:

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

Dans applicationComplete, où nous obtenons randomcookie et de trouver l'alias et le journal sur l'utilisation que:

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); 

qui cette passerelle PyAMF rpc dans l'accès à leur tour:

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 

Et à ce moment-là, sur la côté flash/flex, ce mynetconnection particulier conserve l'état de cookie de session qui peut effectuer des appels futurs tels que, à l'intérieur de la passerelle, request.user est l'utilisateur correctement authentifié qui s'est connecté sur la page Web en premier lieu. Notez à nouveau que les paramètres d'exécution/de débogage de Flex doivent utiliser https, ainsi que les paramètres de passerelle pour NetConnection. Et en libérant ceci, je dois m'assurer que les utilisateurs authentifiés restent sur https.

Toute info plus de gens serait apprécié, surtout s'il y a réel, les commentaires sur les aspects de sécurité de cette ...

0

IE ne donne pas accès aux cookies dans le développement local, mais si vous publiez le fichier SWF et mettre sur un domaine, il devrait ramasser la session comme n'importe quel autre navigateur. Utilisez Firefox 3.6 pour créer vos applications flex localement.

Testé dans IE8, Firefox en utilisant une passerelle pyamf sur Flex 3 avec NetConnection. La fonction de passerelle a été décorée avec @login_required

Questions connexes