私はoauth1.0(twitterとflickr)を扱っています。ウェブサイトはポート80で動作し、oauthサーバーはポート8080で動作します
アルゴリズム:
- ユーザーが有効なaccess_tokenを持っているかどうかを確認するために、ajaxリクエストをoauthサーバーに送信します
- ユーザーがaccess_tokenを持っていないか、access_tokenの有効期限が切れている場合は、認証ウィンドウを開きます
- oauthサーバーでのユーザーのセッションにaccess_tokenを保存します
- 共有データを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
しかし、私はこれを行う方法をドキュメントで見つけることができません