Вопрос

Во-первых, если есть истинный, официальный способ наличие Flash / Flex's NetConnectionS USURP Сеанс / Cookie State из окружающей веб-страницы, так что если пользователь уже вошел в систему, им не нужно предоставлять учетные данные еще раз, просто чтобы настроить связь AMF, пожалуйста, оставьте меня сейчас и опубликуйте официальный ответ.

За исключением того, что я предполагаю, что нет, как я искал, и кажется, не существует. Я придумал средство для этого, но хочу, чтобы некоторые отзывы были ли он безопасны.

  1. Доступ к спутниковой странице для флэш-объекта всегда будет закрепить HTTPS из-за промежуточного программного обеспечения Django
  2. Когда вид на странице загружается в Django, он создает объект «псевдонима сеанса» с уникальным ключом, который указывает на текущую сессию в пьесе (в котором кто-то якобы вошел в систему)
  3. Эта модель смещения сеанса сохраняется, и этот ключ помещен в печенье, ключ которого является еще одной случайной строкой, вызовите его RandomCookie
  4. Это имя ключа RandomCookie передается как переменная контекста и записана в HTML в качестве Flashvar для SWF
  5. SWF также загружен только через HTTPS
  6. Флэш-приложение использует ExternalInterface позвонить в Java, чтобы схватить значение в этом местоположении RandomCookie, а также удаляет cookie
  7. Тогда это создает NetConnection в безопасном сервере HTTPS местоположение, передавая этот RandomCookie в качестве аргумента (данные, не в URL) к RPC входа в систему
  8. На стороне шлюза Pyamf смотрит на псевдоним сеанса и получает сеанс, который указывает на его, и входит в систему пользователем на основе этого (и удаляет псевдоним, так что его нельзя повторно использовать)
  9. (И запрос шлюза также может настроить сеанс cookie и Session.session_key к известному идентификатору сеанса, но я мог бы позволить ему сделать целый новый сеанс ключ ... Я предполагаю, что это должно правильно повлиять на ответ, чтобы это Содержит правильный ключ сеанса)
  10. На данный момент возвращенные значения файла cookie на стороне Flash должны придерживаться NetConnection Так что дальнейшие вызовы аутентифицированы (если соединение аутентифицируется с помощью имени пользователя и пароля нормальным способом, это определенно работает, поэтому я думаю, что это безопасная ставка, тестирование скоро докажет или опровергает это)

Итак, это небезопасно, или эта работа будет должным образом? Насколько я знаю, поскольку HTML-страница гарантированно будет через SSL, ключ и данные cookie должны быть зашифрованы и не в состоянии воровать. Затем информация в нем должна быть безопасна, чтобы использовать одноразовые, что и в основном временный пароль, снова отправляемый через SSL, потому что шлюз также является HTTPS. После этого он использует нормальную систему Pyamf через HTTPS и не делать ничего из обычного.

Это было полезно?

Решение

Нет никаких ответов на это до сих пор, поэтому лучшее, что я могу сделать, это подтвердить, что это на самом деле физически работают. Подробнее о том, как настроить Flex Builder, чтобы написать HTML-обертки, которые общаются с шаблонами Django Pages, см. Мой другой пост. Отказ Вышеуказанное было достигнуто с использованием комбинации вышеупомянутых, плюс:

Сделать 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 )

Flex указывает на страницу Django, которая загружает через вид, содержащий:

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 )

В Flex HTML-обертке, где RandomCookie - это место для поиска псевдонима:

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

В applicationComplete, Откуда мы получаем RandomCookie и нахожу псевдоним и войти в систему, используя это:

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

Что в свою очередь доступа к этому 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

И в этот момент, на стороне flash / flex, что конкретно mynetconnection Сохраняет состояние cookie сеанса, которое может сделать будущие звонки таковы, что внутри шлюза, request.user Является ли правильно аутентифицированный пользователь, который вошел в веб-страницу в первую очередь.

Опять обратите внимание, что настройки Run / Debug для Flex должны использовать HTTPS, а также настройки шлюза для NetConnection. Отказ А при выпуске этого я должен убедиться, что аутентифицированные пользователи остаются на HTTPS.

Любая дополнительная информация от людей будет оценена, особенно если есть настоящие отзывы о аспектах безопасности этого ...

Другие советы

Т.е. не дает доступа к файлам cookie в локальном развитии, но если вы публикуете SWF и поместите на домен, он должен забрать сеанс, как всегда другой браузер. Используйте Firefox 3.6, чтобы построить ваши приложения Flex локально.

Испытано в IE8 Firefox с использованием шлюза Pyamf на Flex 3 с NetConnection. Функция шлюза была украшена @Login_required

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top