2012-11-26 15 views
6

Tôi đang xử lý với oauth 1.0 (twitter và flickr). Trang web làm việc tại cổng 80 và máy chủ oauth làm việc tại cổng 8080cách buộc giá: phiên + sinatra để đọc "rack.session" từ thông số thay vì cookie

Thuật toán:

  1. gửi yêu cầu ajax đến máy chủ oauth để kiểm tra xem người dùng có hiệu lực access_token
  2. cửa sổ cho phép mở nếu người dùng không có access_token hoặc access_token hết hạn
  3. tiết kiệm access_token trong phiên của người sử dụng tại máy chủ oauth
  4. dữ liệu gửi chia sẻ đến máy chủ oauth

Sử dụng giá trị sinatra +: phiên + giá :: phiên :: phần tiếp theo + sqlite để lưu phiên. Nó sẽ gửi Set-Cookie: rack.session=id trong mỗi phản hồi

Tôi đang sử dụng 2 loại yêu cầu: ajax crossdomain với jquery và yêu cầu thông thường với window.open. Tôi gặp vấn đề bảo mật lớn khi chuyển cookie sang yêu cầu ajax crossdomain.

Không có vấn đề mà tiêu đề phản ứng của máy chủ chứa

Access-Control-Allow-Headers: *

crom sẽ ném lỗi bảo mật:

Refused to set unsafe header "Cookie"

Tôi muốn tránh vấn đề này bằng cách thông qua rack.session = id để gửi dữ liệu và tải nó :

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

Nhưng tôi không thể tìm thấy tài liệu hướng dẫn cách thực hiện điều này

+2

Tôi hơi bối rối khi máy chủ đang làm gì. Máy chủ nào là khối 'trước' đang chạy? Khi bạn viết "save access_token trong phiên của người dùng tại máy chủ oauth", điều đó có nghĩa là lưu thông qua cơ sở dữ liệu? "Nó sử dụng sinatra + rack: session ...", 'it' có nghĩa là trang web? Xin lỗi vì là một người đi bộ nhưng sự rõ ràng sẽ giúp trả lời câu hỏi. – iain

Trả lời

1

Rack::Session::Abstract::ID có một tùy chọn được gọi là cookie_only rằng allows the session id to be passed in via the params. Tuy nhiên, nó defaults to true và hầu hết các phiên bản phần mềm trung gian phiên don't bother to override it.

Đặt cược tốt nhất của bạn có thể là bản vá khỉ Rack::Session::Abstract::ID thành mặc định cookie_only thành sai.

Rack::Session::Abstract::ID::DEFAULT_OPTIONS.merge! :cookie_only => false 
Các vấn đề liên quan