2015-06-22 24 views
6

Nếu tôi có một máy chủ duy nhất có nhiều tên miền, phương pháp ưa thích để triển khai giải pháp đăng nhập một lần trên cùng một tên miền là gì. Tôi hiện đang sử dụng thiết lập, có vài triệu cookie được đặt trên các tên miền riêng biệt và bị kẹt. Ngoài việc triển khai SSO, tôi cũng cần di chuyển các cookie khác nhau sang miền trung tâm. Về máy chủ khác nhau, họ chỉ có một trang duy nhất mà yêu cầu tôi để hiển thị trạng thái khác nhau tuỳ thuộc vào việc hay không người dùng sẽ được đăng nhậpĐăng nhập một lần, nhiều tên miền trên cùng một máy chủ, ruby ​​trên đường ray

Tôi đã thử những điều sau đây:.

  1. CORS: chọn một tên miền là trung tâm xác thực trung tâm. Từ tất cả các miền khác, hãy kiểm tra tên miền chéo để xem liệu người dùng có đăng nhập hay không. Để di chuyển cookie, hãy phát hiện nếu có đối tượng "current_user", gửi cho khách hàng, thực hiện yêu cầu CORS, ký tên người dùng và xóa mã thông báo. Hoạt động tuyệt vời! NHƯNG ... Sau khi xây dựng nó trong 2-3 tuần, nó HOÀN TOÀN FAILS trong IE. Ngay cả IE11, tôi nhận thấy thiết lập mặc định là vô hiệu hóa hành vi này.

  2. cố gắng mày mò với các cửa hàng phiên tại

    Rails.application.config.session_store 
    

không có may mắn.

Tôi hiện đang thử nghiệm với những điều sau đây:

  1. JSONP: Tôi đã có người ngay bây giờ cố gắng để chuyển đổi ở trên để JSONP thay vì trong khi tôi thử một số tùy chọn khác:

  2. Thiết lập nhà cung cấp OAUTH tùy chỉnh. Giống như trước đây, nó sẽ là "miền trung tâm" nếu người đó đăng nhập, quay lại miền được yêu cầu bằng mã thông báo mà người dùng có thể đưa ra yêu cầu. https://github.com/songkick/oauth2-provider

  3. Nhìn vào điều này nhưng có vẻ đã lỗi thời? https://github.com/rubycas/rubycas-client. Tôi cũng có cảm giác rằng đây có thể là một giải pháp nếu tôi thực hiện điều này từ khi bắt đầu, nhưng chúng tôi đã dự án được bao xa, chưa rõ tôi sẽ chuyển các cookie hiện tại như thế nào. Ngoài ra nó là không rõ ràng nếu điều này đòi hỏi phải có hai ứng dụng cho tôi để đứng dậy và chạy (một cho khách hàng (s), một cho máy chủ auth)

Như tôi đã đi qua mỗi một trong các khả năng, nếu ai đã có chút kinh nghiệm nào làm những gì tôi đang làm, xin vui lòng thông báo cho tôi và tiết kiệm cho tôi rất nhiều công việc :)

+1

oAuth có lẽ là cách "đúng" để thực hiện việc này. Tôi khuyên bạn nên tập trung nỗ lực của mình ở đó. –

Trả lời

1

Cách tốt nhất trừ khi đây là một ứng dụng đồ chơi có lẽ là để thiết lập một nhà cung cấp oauth.

Chúng tôi sử dụng Doorkeeper với Devise cho điều này và nó hoạt động tuyệt vời. Bạn sẽ dành thời gian để dành một chút thời gian để đọc tài liệu và xem một hoặc hai bài nói chuyện trên youtube nếu bạn chưa quen với chiến lược nhưng một khi bạn hiểu khái niệm cốt lõi, nó thực sự khá đơn giản để thiết lập sự giúp đỡ của viên ngọc này.

Có video chạy nhanh trên http://railscasts.com/episodes/353-oauth-with-doorkeeper

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