6

私はoauth1.0(twitterとflickr)を扱っています。ウェブサイトはポート80で動作し、oauthサーバーはポート8080で動作します

アルゴリズム:

  1. ユーザーが有効なaccess_tokenを持っているかどうかを確認するために、ajaxリクエストをoauthサーバーに送信します
  2. ユーザーがaccess_tokenを持っていないか、access_tokenの有効期限が切れている場合は、認証ウィンドウを開きます
  3. oauthサーバーでのユーザーのセッションにaccess_tokenを保存します
  4. 共有データをoauthサーバーに送信する

sinatra + Rack:session + Rack :: session :: sequel+sqliteを使用してセッションを保存します。Set-Cookie: rack.session=id各応答で送信します

私は2種類のリクエストを使用しています:jqueryを使用したクロスドメインajaxとwindow.openを使用した通常のリクエストです。クロスドメインajaxリクエストにCookieを渡す際のセキュリティ上の大きな問題があります。

サーバーの応答ヘッダーに含まれているものに関係なく

Access-Control-Allow-Headers:*

クロムはセキュリティエラーをスローします:

安全でないヘッダー「Cookie」の設定を拒否しました

Rack.session = idを渡してデータを投稿し、ロードすることで、この問題を回避したいと思います。

before "/twitter/connect.json" do
  session = Rack::Session::something(params["rack.session"])
end

しかし、私はこれを行う方法をドキュメントで見つけることができません

4

1 に答える 1

1

Rack::Session::Abstract::IDparamsを介してセッションIDを渡すことができるcookie_onlyというオプションがあります。ただし、デフォルトではtrueに設定されており、ほとんどのセッションミドルウェア実装はわざわざオーバーライドしません

あなたの最善の策は、おそらくRack::Session::Abstract::IDデフォルトcookie_onlyでfalseにパッチを適用することです。

Rack::Session::Abstract::ID::DEFAULT_OPTIONS.merge! :cookie_only => false
于 2013-05-20T06:46:30.450 に答える