2011-07-01 9 views
1

最近、私のプロジェクトのSymfonyモジュールの1つにXML APIを追加するように求められました。私はそれをし、それはうまく動作します。認証にはsfGuardPluginを使用します。 Symfonyのバージョンは1.3.11です。 Doctrineではなく、Propelを使う。sfGuardPluginセッション:wgetで再利用する方法 - またはSIDをsfGuardUserにマップする

私にとって最も最近の要求はこれです:

  1. 私たちは、ウェブサイトにFlashゲームを埋め込みます。
  2. FlashはXML APIへのリクエストを行います。
  3. Flashアプリケーションをコーディングしている人は、ブラウザとクッキーを共有していないと言っています。
  4. Flashが現在ログインしているユーザーのセッションを再利用できるようにします(ユーザーがログインしていない場合でも表示されないようにします)。

私はこの-だろう解決しようとしました:を(他のSOの記事や、さまざまなGoogleの検索結果から取られた)

  1. 私はsymfonyのセッションがsymfonyクッキーに存在すると言われました。
  2. 私はこれがに判明
  3. など、同じユーザーがログインしている、私は(私の場合は、wget)別のクライアントでは、この値をコピーして、session_id("stolen_session_id")をすれば、私はセッションを複製することができるようになりますと言われました間違っている。私のクッキーsymfonyが "blabla"という値を持っていたとします。私はこれをした:wget --post-data='session_id=blabla' X.X.X.X:NN/api/bla.xml -O-。私のサーバーのPHPコードは、このPOSTパラメータを解析し、それをsession_id関数に送ります。その後、session_id('blabla')1を返していることをログに記録しました。ただし、$this->getUser()->getGuardUser()を呼び出すとnullが返されます。

私は、有効なsfGuardUserに渡さsession_idをマッピングする方法が必要です。または既に存在するセッションを再利用する別の方法を見つけることができます。

私は完全にクッキーにアクセスできるとします。私は、これを達成するために複製する複製のいずれか(またはそのすべて)を知りたいです。

私のChrome開発ツールでは、symfonyのセッションタイプのCookieが表示されています。だから私の方法がうまくいかない理由はまったく不思議ではありませんが、sfGuardPluginを使っている間、私はSymfonyでこれをどうやってやっているのですか?

これは最も情報に乏しい質問の1つではありませんが、私はただの助けが必要です。

お時間をいただきありがとうございます。

(Dimitar P.)

おっと、私は自分のドメインに見たクッキー言及するのを忘れてしまった: __utmz

  • symfonyの
  • sfRemember
  • __utma
  • __utmb
  • __utmc
  • 私は最後の4つはGoogleアナリティクスだと思っています。

答えて

0

私はこれを行うにはしたくなかったが、私は他の選択肢を見つけることができませんでした:

$ wget --header='Cookie: symfony=blabla' X.X.X.X:NN/api/bla.xml -O-

私は私のXML APIはRESTになりたかったが、明らかに、symfonyは認証済みの要求を許可していません。 Cookieを使用する以外の方法(URLにセッションIDを常に含めることはできません)は、にはすべてというオプションではありません。

誰かが完全にRESTの選択肢を示しても、私は彼の答えをアップアップします。

+0

のようなものを作成しましょう。まあまあ、誰かが私と同じ答えを出して15人の担当者を得るのに十分な時間を待っていました。私の答えを受け入れます。 ;) – dimitarvp

0

どのユーザーが(wget)リクエストを実行しているかを指定する方法が必要です。また、PHPセッションはデフォルトでセッションIDを使用します。

一般的な方法は、トークンベースの認証です。これを実現する最も一般的な方法はOAuthです。このライブラリには、デフォルトのライブラリ(symfonyとAPIコンシューマの両方)がたくさんあります。

このAPIを使用している唯一のユーザーなら、セッションごとにユーザーごとにカスタムトークン(ランダムsha1文字列)を作成することもできます(これをデータベースのどこかに保存できます)。今度は `wget XXXX:NN/api/bla.xml?token = asdfhdsfhf

+0

あなたの提案をありがとう。残念ながら、私はレガシーソフトウェアで作業しています。多くの変更を行うことはできません。 – dimitarvp

関連する問題