2009-07-25 7 views
10

Nhấn roadblock trong khi triển khai sub domain based language switcher (en.domain.com tải tiếng Anh, jp.domain.com tải tiếng Nhật).ASP.NET MVC - xác thực tên miền chéo/thành viên

Làm cách nào để có được một hệ thống thành viên duy nhất hoạt động trên nhiều tên miền phụ (ASP.NET MVC C#)?

Thấy điều gì đó về việc thêm domain="domain.com" vào <forms > mục nhập trong web.config. Đã làm điều đó, nhưng điều đó làm việc khi thử nghiệm trên máy chủ web phát triển trực quan studio địa phương?

+0

thể trùng lặp của [hình thức xác thực trên Sub-Domains] (http://stackoverflow.com/questions/608120/forms-authentication-across-sub-domains) – rcdmk

Trả lời

7

Hãy thử tự tạo cookie.

Trong AccountController bạn sẽ tìm thấy điều này:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

rằng "tạo ra và thêm vào bộ sưu tập cookie". Nó không cho phép sửa đổi tên miền (nhưng không cho phép sửa đổi đường dẫn, kỳ quặc). Thay vì tạo ra một cookie mà không cần thêm vào bộ sưu tập, chỉnh sửa các thuộc tính cần thiết, sau đó thêm vào bộ sưu tập:

var a = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie); 
//if you're debugging right here, a.Domain should be en.example.com; change it 
a.Domain = "example.com"; 
HttpContext.Current.Response.Cookies.Add(a); 

James

+0

ý tưởng tuyệt vời ... mặc dù tôi đã đã quyết định phế liệu bằng cách sử dụng các tên miền phụ để lựa chọn ngôn ngữ, đây là một điều cần nhớ. Cảm ơn bạn! – Chaddeus

+0

Điều này không hiệu quả đối với tôi. Tôi đang sử dụng EF6 MVC 4 ... bạn có lời khuyên nào không? – ilans

0

Vấn đề của bạn là cách trình duyệt gửi cookie trong khi yêu cầu.

Cookie thường được gắn với một tên miền duy nhất, đây là lý do bảo mật và hiệu suất. Ví dụ: người dùng không muốn gửi cookie cho tên miền của bạn tới bất kỳ tên miền nào khác vì cookie của bạn có thể chứa thông tin nhạy cảm.

Trình duyệt phân biệt giữa các cookie được đặt với en.domain.com và jp.domain.com. Chúng không cho phép cookie từ một tên miền chuyển sang miền khác vì chúng không nằm trên tên miền chính.

Giải pháp cho vấn đề của bạn là kiểm soát việc tạo cookie. Tôi đã không chơi nhiều với ASP.NET MVC, nhưng tôi chắc chắn nó có thể được thực hiện không thông qua HTML nhưng thông qua một tài sản hoặc một cái gì đó. Đây là một kịch bản rất phổ biến. Bạn nên đặt tên miền cookie thành "domain.com" cho các hộp sản xuất của bạn, điều đó là chính xác. Nếu bạn đang làm việc trên một hộp địa phương, bạn nên đặt tên miền cookie thành "".

3

Bạn phải sử dụng dấu chấm tiền tố, như thế này.

<authentication mode="Forms"> 
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" /> 
</authentication> 
+1

cũng có, điều này chỉ hoạt động cho các tên miền cấp 2 trở lên, tức là '.mydomain' không hoạt động, nhưng' .mydomain.com' sẽ –

+0

nó có hoạt động cho "localhost" không? tức là để gỡ lỗi trong VS? Bạn cũng cần phải đặt tên miền trong thẻ biểu mẫu nếu bạn đang đặt tên miền trong cookie? – Rahatur