Tìm kiếm một lời khuyên nhỏ (hoặc thậm chí có thể là câu trả lời trực tiếp).Truyền HttpContext.Current.User.Identity tới WCF
Tôi có trang web MVC3. Tôi cũng có một tập hợp các dịch vụ WCF đang chạy (hiện tại mọi thứ đều nằm trên cùng một hộp).
Tôi đang cố gắng để làm là xác thực ứng dụng khách (phần đó hoạt động tốt), sau đó chuyển người dùng đã xác thực đó cho các cuộc gọi WCF khác nhau.
Tại thời điểm tôi đã nối phương pháp Application_AuthenticateRequest()
trong Global.Asax
, mà nắm để tạo ra một mới GenericIdentity & GenericPrincipal
, sau đó gán chính đó để HttpContext.Current.User
:
...
GenericIdentity identity = new GenericIdentity(userName);
GenericPrincipal principal = new GenericPrincipal(identity, null);
HttpContext.Current.User = principal;
...
Và một phần điều đó dường như làm việc tốt như tốt.
Nhưng khi tôi nhấn dịch vụ của mình, tôi đã mất hoàn toàn người dùng mà tôi đã đặt. Các giá trị trống hoặc sai.
Điều chính tôi nhận thấy là ở phía khách hàng, đối tượng HttpContext.Current.User.Identity
thuộc loại {System.Web.Security.FormsIdentity}
, nhưng trong dịch vụ thuộc loại {System.Security.Principal.WindowsIdentity}
.
Dựa trên một số nội dung tôi đã đọc, có vẻ như chỉ cần sửa đổi web.config
của tôi để nó chứa aspNetCompatibilityEnabled="true"
có thể đủ để làm cho công việc này hoạt động bình thường. Nhưng đó không phải những gì tôi thấy. Vì vậy, hoặc là tôi không hiểu tất cả mọi thứ (một khả năng rất tốt) hoặc tôi đã có một cái gì đó hơi say lên (một khả năng tốt).
Vì vậy, câu hỏi của tôi. Điều này thậm chí có thể, và nếu có - suy nghĩ về những gì tôi đang mất tích? Tôi nhận thấy một vài người khác đã đăng nội dung nào đó tương tự nhưng chưa bao giờ nhận được câu trả lời rõ ràng (xem here và here).
Bất kỳ đề xuất nào được đánh giá rất nhiều.
Thật lạ khi bạn nói rằng bạn thấy một 'FormsIdentity' khi bạn đặt cụ thể một' GenericIdentity' trên ngữ cảnh người dùng hiện tại. Bạn đã trộn ở đó chưa? –