2010-08-24 50 views
5

Tôi đang triển khai DotNetOpenAuth cho cả nhà cung cấp OpenId và một bên dựa vào. Trong cả hai trường hợp, các máy chủ nằm phía sau bộ cân bằng tải, vì vậy đối với bất kỳ yêu cầu HTTP nào, chúng tôi không thể giả định rằng chúng tôi sẽ nhấn cùng một máy chủ.DotNetOpenAuth trên trang trại web

Dường như DotNetOpenAuth depends on the Session để lưu trữ khóa yêu cầu đang chờ xử lý. Bởi vì máy chủ có thể thay đổi giữa các yêu cầu, chúng tôi không thể phụ thuộc vào Phiên InProc chuẩn. Thật không may, chúng tôi đã không thể triển khai thành công SQL làm cửa hàng cho Phiên.

Câu hỏi của tôi là: an toàn để lưu trữ PendingAuthenticationRequest là cookie của khách hàng? Còn tệ hơn là sử dụng Session?

Trả lời

5

Tài sản ProviderEndpoint.PendingAuthenticationRequest chỉ để thuận tiện cho bạn, chủ yếu cho các trường hợp đơn giản hơn. Nếu nó không làm việc cho bạn, bằng mọi cách lưu trữ nó theo cách khác và hoàn toàn bỏ qua tài sản này. Không có hại gì ở đó.

Cuối cùng một phiên được theo dõi bởi một cookie HTTP, vì vậy bạn chắc chắn có thể lưu trữ trạng thái yêu cầu xác thực hoàn toàn trong cookie nếu bạn thích để nó hoạt động trong môi trường trang trại. Một cách tiếp cận khác là không yêu cầu máy khách (hoặc máy chủ) theo dõi trạng thái bằng cách thực hiện mọi thứ (bao gồm xác thực) được xử lý trực tiếp tại URL điểm cuối OP hoặc chuyển hướng người dùng từ URL điểm cuối OP bằng chuỗi truy vấn bao gồm tất cả thông tin của tiểu bang bạn cần theo dõi. Hãy cẩn thận về cách tiếp cận thứ hai mặc dù vì bạn sẽ hiển thị dữ liệu trạng thái của mình cho người dùng để xem và có thể giả mạo.

Tóm lại, bạn có thể hoặc không thể chọn lưu trữ phiên người dùng trong cửa hàng SQL. Chắc ổn thôi. Vấn đề tôi nghĩ bạn gặp phải (mà chúng tôi thảo luận qua email) là bạn cần triển khai IProviderApplicationStore của riêng mình, sẽ lưu trữ các nonces và các liên kết trong cơ sở dữ liệu được chia sẻ trên tất cả các máy chủ web của bạn. Điều này là bắt buộc phải làm và trực giao với trạng thái phiên người dùng vì điều này được lưu trữ ở cấp ứng dụng.