Tôi đang cố gắng thiết lập xác thực biểu mẫu trên nhiều máy chủ và tên miền phụ. Tôi có phím máy tĩnh thiết lập cho mỗi ứng dụng như vậy:Thiết lập xác thực biểu mẫu liên tục trên nhiều máy chủ và tên miền phụ
<system.web>
<machineKey validationKey="574...7A7"
decryptionKey="2C3...A0D"
validation="HMACSHA256"
decryption="AES" />
</system.web>
... và hình thức xác thực của tôi được cấu hình giống nhau cho mỗi ứng dụng:
<forms loginUrl="/login" timeout="2880" defaultUrl="/" path="/" name=".SHAREDAUTH" domain="domain.com" protection="All" />
Tôi cũng đã cố gắng đặt trước từ tên miền của tôi với một khoảng thời gian như tôi đã thấy một số người đề xuất, nhưng điều đó cũng không hiệu quả.
Tính năng này hoạt động tốt trên máy cục bộ của tôi với các trang web riêng được thiết lập trong IIS cho từng tên miền phụ. Nó cũng hoạt động tốt trên máy chủ dev của chúng tôi, nơi tất cả các trang web vẫn nằm trên một máy duy nhất. Tuy nhiên, khi triển khai vào môi trường dàn dựng của chúng tôi, xác thực miền chéo ngừng hoạt động. Trong môi trường đó, tôi có trang web chính (nơi đăng nhập xảy ra) đang chạy trên một máy chủ duy nhất và trang web phụ (nơi xác thực của tôi sẽ vẫn tồn tại) chạy trên hai máy chủ cân bằng tải. Tất cả đang chạy dưới IIS 7 trên Windows 7 (cục bộ) hoặc Server 2008 R2 (dev và dàn dựng).
Tôi đã xác minh rằng các phím máy giống nhau bằng cách mã hóa một chuỗi trên trang chính bằng MachineKey.Encode
và giải mã kết quả trên máy chủ phụ với MachineKey.Decode.
Tôi cũng đã xác minh rằng cookie .SHAREDAUTH được chuyển đến ứng dụng thứ hai trong yêu cầu , cả hai bằng cách kiểm tra các tiêu đề yêu cầu như được Firefox và Chrome báo cáo và gắn trình gỡ lỗi vào Application_BeginRequest
và Application_AuthenticateRequest.
Tôi có thể thấy cookie trong khi thực hiện Application_BeginRequest
nhưng đã biến mất khi Application_AuthenticateRequest
được gọi. Từ những gì tôi có thể thu thập, điều đó có nghĩa là việc deserialization của vé xác thực thất bại, nhưng tôi không thể hiểu tại sao điều đó có thể xảy ra trong môi trường multi-server, nhưng không phải là môi trường máy chủ đơn, ngoài các phím máy khác nhau , mà tôi đã xác nhận không phải là trường hợp.
Tôi cũng có thiết lập MembershipProvider và RoleProvider tùy chỉnh và những tác phẩm này hoạt động độc lập trên mỗi trang web.
Tôi đang thiếu gì?
Hãy không tiền tố tiêu đề của bạn với "ASP.Net C# -" và như vậy. Đó là những gì các thẻ cho. –
Đối với những người có cùng vấn đề, tôi thực hiện các mẹo trong bài đăng này: http://stackoverflow.com/questions/8361323/net-2-0-web-app-authentication-failing-the-ticket-supplied- không hợp lệ – user1482638