2013-05-01 27 views
17

Tôi cố gắng để thực hiện một giải pháp đơn sign-on cho nhiều đường ray (v3.2) các ứng dụng lưu trữ tại tên miền phụ khác nhau của example.comSharing phiên trên đường ray ứng dụng trên các tên miền phụ khác nhau

Một ứng dụng đóng vai trò như một bản sắc nhà cung cấp, sử dụng thiết lập cho auth và đặt tại users.example.com Các ứng dụng khác dựa vào nhà cung cấp nhận dạng để xác thực, sử dụng devise + omniauth, với các miền của [app1.example.com, app2.example.com và ví dụ .com]. Mục nhập blog này lấy cảm hứng từ phần lớn việc triển khai của tôi: http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

Tôi làm việc ổn, nhưng vấn đề vẫn không được chia sẻ vì vậy sau khi đăng nhập vào nhà cung cấp danh tính, tôi vẫn phải thực hiện cuộc gọi từ mỗi của các ứng dụng khác để xác thực và tôi cần điều này là vô nghĩa đối với người dùng.

Tôi đã thử sử dụng cùng một mã thông báo bí mật tại secret_token.rb, khóa phiên tương tự tại session_store.rb và: domain =>: all (cũng đã thử '.example.com' và 'example.com' làm giá trị). Vẫn không có may mắn.

Thực hiện việc trên, tôi thấy trong phiên. Sau khi đăng nhập vào nhà cung cấp danh tính, biến phiên "warden.user.user.key" được điền. Khi tôi ngay lập tức truy cập ứng dụng trên app1.example.com, session.inspect hiển thị cùng session_id và _csrf_token nhưng biến "warden.user.user.key" hiện bị thiếu.

Tôi cảm thấy như tôi đang thiếu điều gì đó ngớ ngẩn .. Bất kỳ ý tưởng nào có thể là gì?

+0

Bạn có thể nhận được giải pháp này không? Tôi đang cố gắng hoàn thành chính xác điều đó. – Jakcst

+0

Có phải 'user.key' được lưu ở đâu đó trong cookie không? Có lẽ miền cookie không được đặt thành * .example.com và thay vào đó được đặt thành users.example.com? (Chỉnh sửa: nhấn enter đã gửi sớm.) Làm tất cả các ứng dụng riêng biệt có nhấn 'users.example.com' để xác minh phiên không? Hoặc để rephrase, làm thế nào để 'app1.example.com' xác minh phiên của nó, ít nhất là theo sự hiểu biết của bạn về hệ thống? Các phiên được lưu trữ ở đâu? DB được chia sẻ? – dbalatero

Trả lời

3

Tôi nghĩ rằng đó là một câu hỏi SO về việc nhận một cookie duy nhất để làm việc trên các tên miền phụ đó sẽ trả lời bạn:

https://stackoverflow.com/a/10403338/2573896

Ngoài ra, tôi có thể tưởng tượng rằng việc sử dụng một cụm memcached với Dalli và memcached như của bạn cửa hàng phiên sẽ làm việc cũng như:

http://awesomerails.wordpress.com/2011/08/23/rails-3-memcached-session-store/

Đối với mục đích của ứng dụng của bạn, giải pháp đầu tiên có ý nghĩa hơn mặc dù.

Các vấn đề liên quan