0

まず最初に、flash/flex が周囲の Web ページのセッション/Cookie の状態を奪う真の公式な方法がNetConnectionあれば、ユーザーがすでにログインしている場合、資格情報を再度提供する必要はありません。 AMF接続をセットアップしてください。今すぐ私を止めて、公式の回答を投稿してください。

それを除けば、私が検索したところ存在しないように見えるので、存在しないと仮定しています。私はこれを行う手段を考案しましたが、それが安全かどうかについてのフィードバックが必要です。

  1. django ミドルウェアが原因で、フラッシュ オブジェクトのラッパー ページにアクセスすると、常に安全な https にアクセスします。
  2. ページ ビューが Django に読み込まれると、現在実行中のセッション (表向きは誰かがログインしているセッション) を指す一意のキーを持つ "セッション エイリアス" オブジェクトが作成されます。
  3. そのセッション エイリアス モデルが保存され、そのキーが別のランダムな文字列である Cookie に配置されます。これを randomcookie と呼びます。
  4. その randomcookie キー名はコンテキスト変数として渡され、swf への flashvar として html に書き込まれます。
  5. swf も https 経由でのみロードされます
  6. Flash アプリケーションはExternalInterface、Java を呼び出してそのランダム Cookie の場所の値を取得し、Cookie も削除します。
  7. 次にNetConnection、安全なサーバー https の場所に を作成し、その randomcookie を引数 (URL ではなくデータ) として login-using-cookie rpc に渡します。
  8. ゲートウェイ側では、pyamf はセッション エイリアスを検索し、それが指すセッションを取得し、それに基づいてユーザーをログインします (エイリアスを削除するため、再利用できません)。
  9. (また、ゲートウェイ リクエストは、セッション Cookie と session.session_key を既知のセッション ID に設定することもできますが、まったく新しいセッション キーを作成することもできます...そうすることで、レスポンスが適切に影響を受けると想定しています。正しいセッションキーが含まれています)
  10. この時点で、フラッシュ側で返された Cookie の値は、NetConnectionさらなる呼び出しが認証されるように に固執する必要があります (接続が通常の方法でユーザー名とパスワードを使用して認証される場合、これは確実に機能するため、これは安全な賭けだと思います。すぐにこれを証明または反証します)

それで、これは安全ではありませんか、それとも正しく機能しますか? 私が知る限り、html ページは SSL 経由であることが保証されているため、キーと Cookie データは暗号化され、盗まれないようにする必要があります。次に、ゲートウェイもhttpsであるため、その中の情報は、基本的に一時パスワードとして1回限り使用しても安全であり、ssl経由で再度送信されます. その後、https 経由で通常の pyAMF システムを使用し、異常なことは何もしていません。

4

2 に答える 2

0

これについてはまだ回答がありませんので、私にできる最善のことは、実際に物理的に機能することを確認することです. Django ページ テンプレートと通信する html ラッパーを作成するように Flex Builder を設定する方法の詳細については、私の他の投稿を参照してください。上記は、前述の組み合わせに加えて、以下を使用して達成されました。

モデルを作成しました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-wrapper では、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 ゲートウェイ 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 側では、最初に Web ページにログオンした適切に認証されたユーザーがmynetconnectionゲートウェイ内にあるように、将来の呼び出しを行うことができるセッション cookie の状態が保持されます。request.user

flex の実行 / デバッグ設定では、https を使用する必要があることに注意してくださいNetConnection。これをリリースするときは、認証されたユーザーが https にとどまるようにする必要があります。

特にこれのセキュリティ面に関する実際のフィードバックがある場合は、人々からのさらなる情報をいただければ幸いです...

于 2010-08-25T21:35:30.583 に答える
0

IE は、ローカル開発では Cookie へのアクセスを許可しませんが、SWF を公開してドメインを配置すると、他のブラウザーと同じようにセッションを取得する必要があります。Firefox 3.6 を使用して、フレックス アプリをローカルでビルドします。

NetConnection を備えた Flex 3 で pyamf ゲートウェイを使用して、IE8、Firefox でテスト済み。ゲートウェイ機能は @login_required で装飾されました

于 2011-06-03T20:19:29.587 に答える