7

Tôi đang làm việc trên một dự án ASP.NET MVC4 bằng SimpleMembership, tạo ra một cookie ASPXAUTH khi bạn đăng nhập. Có vẻ như nó hoạt động tốt, nhưng hôm nay tôi đã mở một dự án MVC4 khác, chỉ để thông báo rằng tôi đã đăng nhập.Simplemembership ASPXAUTH cookie xác thực trên hai dự án web riêng biệt

Điều này vô cùng kỳ quặc, bởi vì dự án mới theo nghĩa đen không có bất kỳ người dùng nào được xác định trong cơ sở dữ liệu. Thậm chí còn bối rối hơn là khi tôi nhấn "đăng xuất" trên dự án mới, nó đã đăng xuất tôi khỏi trang web gốc.

Cả hai trang web đang chạy trên các cổng khác nhau, mặc dù cả trên máy chủ cục bộ. Khi kiểm tra Yêu cầu xem lý do tại sao nó trả về "IsAuthenticated == true", tôi nhận thấy rằng cookie ASPXAUTH đang được gửi tới cả hai trang web và tham số "tên miền" của cookie trong trình gỡ lỗi là "null". Điều này khiến tôi nghĩ rằng có lẽ cookie đang được tạo ra dưới dạng cookie "không có tên miền" (tôi không biết liệu điều đó thậm chí có thể thành thật hay không), và xem xét cài đặt web.config để chỉ định miền :

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" /> 
</authentication> 

Rất tiếc, việc đặt tham số "miền" đã khiến cookie ngừng hoạt động. Tôi đã thử tất cả hoán vị (với http, không http, với cổng, không có cổng, v.v) và mỗi khi tôi chỉ định miền, trình duyệt sẽ nhận cookie có tên miền được chỉ định đúng (tôi đã kiểm tra nó trong các công cụ dành cho nhà phát triển Chrome), nhưng sau đó không bao giờ gửi lại cho máy chủ của các yêu cầu tiếp theo.

Vì vậy, tôi khá bối rối về những gì đang xảy ra ở đây. Đây có phải là rò rỉ bảo mật mà tôi đã gây ra do không thiết lập điều gì đó đúng ở đâu đó không? Hay hành vi hoàn toàn bình thường là cookie ASPXAUTH sẽ cho phép người dùng trên hai ứng dụng web hoàn toàn khác nhau trên hai cổng khác nhau trên cùng một miền? Tôi sẽ kiểm tra điều này trên một máy chủ web nhưng tiếc là tôi không có quyền truy cập vào bất kỳ mà chạy MVC4 tại thời điểm này.

Xin cảm ơn trước.

+0

Kiểm tra tại đây http://stackoverflow.com/questions/1612177/are-http-cookies-port-specific – Chandermani

Trả lời

5

ASPXAUTH là tên mặc định được cung cấp cho cookie nhưng bằng cách thay đổi tên này cho từng dự án trong Web.Config bạn có thể làm cho nó chỉ áp dụng cho dự án đó.

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" name=".PROJ1AUTH"/> 
</authentication> 
3

Thêm thuộc tính Tên vào phần tử biểu mẫu. Nó sẽ đặt tên cho authcookie sau tên bạn cung cấp làm cho nó độc đáo giữa các dự án khác.

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" name="A_UNIQUE_NAME" /> 
</authentication> 
+0

Hoạt động! Hữu ích nếu bạn có 2 dự án đã mở cùng một lúc. – cryss