2009-09-04 9 views
8

Bạn có thể đã giải quyết vấn đề này trước đây.Cách cấu hình dotNetOpenId trong một phiên làm việc với môi trường cân bằng tải ít hơn

Tôi cần có khả năng sử dụng id mở trong môi trường không có phiên dính. Các máy chủ lưu giữ các tiêu đề.

Tôi đang sử dụng ASP.NET MVC và dotNetOpenId phiên bản 3.2.0.9177. Mặc dù xác thực trên trang web của bên thứ ba không gặp trục trặc khi trả lại phản hồi nhưng tôi nhận được lỗi và xác thực không thành công.

Mọi suy nghĩ?

Trả lời

6

Stateful

phương pháp tối ưu nhất là viết một cửa hàng tùy chỉnh kiên trì mà thực hiện IRelyingPartyApplicationStore cho "bí mật" rằng OpenID RPs yêu cầu, và thông qua ví dụ của bạn để các nhà xây dựng OpenIdRelyingParty(IRelyingPartyApplicationStore), hoặc đăng ký nó trong bạn web.config file.

Stateless

Một giải pháp dễ dàng hơn nhiều mà sẽ đủ cho hầu hết các kịch bản là sử dụng chế độ stateless thay vào đó, để không một quốc gia cần phải được chia sẻ trên máy chủ trang trại web của bạn.

Bạn có thể kích hoạt chế độ không trạng thái bằng cách khởi tạo OpenIdRelyingParty chuyển null làm phiên bản lưu trữ ứng dụng của bạn. Việc gọi hàm khởi tạo mặc định sẽ khiến DNOA sử dụng kho lưu trữ trong bộ nhớ của nó, phá vỡ trên các trang trại máy chủ, do đó hàm tạo mặc định là không đủ.

Hoặc nếu bạn đang sử dụng các điều khiển ASP.NET, chỉ cần đặt Stateless = true trên điều khiển.

+0

Cảm ơn. Phần không quốc tịch dường như đã sửa nó. –

1

Sử dụng DotNetOpenID, bạn sẽ có thể duy trì trạng thái bạn cần trong khi xác thực cho khách hàng thông qua cookie.

Chỉnh sửa: Tôi không có bất kỳ mã ví dụ nào vì tôi chưa bao giờ phải sử dụng DotNetOpenID trong môi trường ít phiên, nhưng tôi sẽ kiểm tra liên kết này, nó có thể cung cấp thông tin bạn cần: http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto

+0

Tôi đã sử dụng một cái gì đó tương tự để giữ một cái gì đó trong TempData, nhưng bất kỳ ví dụ mã cho DotNetOpenID? Tôi chưa quen với nó. Cảm ơn –

+0

Tôi không có sẵn bất kỳ ví dụ mã nào, nhưng hãy kiểm tra liên kết tôi đã cung cấp. – mkchandler

4

Đây là cách chúng ta đang tạo điều kiện cho chế độ không quốc tịch:

var uri = new Uri(Request.Url, Request.RawUrl); 
var openid = new OpenIdRelyingParty(null, uri, 
      Request.HttpMethod == "GET" ? Request.QueryString : Request.Form); 

Dường như làm việc cho đến nay, mặc dù mỗi Andrew có một buổi biểu diễn hit nhỏ. Không chắc chắn rằng vấn đề kể từ khi đăng nhập là một hoạt động khá hiếm.

+0

Hàm tạo ba tham số này là thích hợp cho DotNetOpenId 2.x, trong khi hàm tạo một tham số cho chế độ không trạng thái là thích hợp cho DotNetOpenAuth 3.x. –

+0

Cảm ơn ông Coding Horror/One-of-the-creators-of-stackoverflow. Tôi sẽ thử vào buổi sáng thứ hai. –