2009-03-03 30 views
25

Có thể xác thực người dùng trên các tên miền phụ khi xác thực diễn ra tại miền phụ thay vì tên miền chính không?Xác thực biểu mẫu trên các tên miền phụ

Ví dụ:

Nhật ký người dùng vào site1.parent.com, sau đó chúng tôi cần gửi chúng đến report.parent.com.

Tôi có thể xác thực chúng vào trang web báo cáo ngay cả khi đăng nhập xảy ra ở miền phụ không?

Cho đến nay tất cả các nghiên cứu tôi đã thực hiện đều có người dùng đăng nhập vào miền gốc trước và sau đó mỗi tên miền phụ có quyền truy cập vào cookie xác thực.

+0

xem câu trả lời của tôi ở đây: http://stackoverflow.com/a/14781927/3661 –

Trả lời

10

Bạn có thể đặt cookie làm miền mẹ tại thời điểm xác thực nhưng bạn phải đặt rõ ràng tên miền đó, cookie sẽ mặc định là miền đầy đủ mà bạn đang truy cập.

Khi cookie xác thực được đặt chính xác thành tên miền chính, thì tất cả các tên miền phụ sẽ có thể đọc được.

4

Có, chắc chắn. Bạn có thể cần phải cuộn của riêng bạn ở một số giai đoạn, nhưng nó phải được doable.

Một ý tưởng: khi bạn chuyển hướng chúng qua ranh giới, hãy cung cấp cho họ mã thông báo một lần và sau đó yêu cầu miền phụ nhận để mong đợi họ (người dùng này, từ IP này, với mã thông báo này).

29

Khi bạn xác thực người dùng, hãy đặt tên miền của cookie xác thực thành tên miền cấp hai, tức là parent.com. Mỗi miền phụ sẽ nhận được cookie của miền gốc theo yêu cầu, vì vậy việc xác thực trên mỗi tên miền có thể thực hiện được vì bạn sẽ có cookie xác thực được chia sẻ để làm việc.

Mã xác thực:

System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False); 
authcookie.Domain = "parent.com"; 
HttpResponse.AppendCookie(authcookie); 
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName, 
                     False)); 
+1

tôi sử dụng "FormsAuthentication.SetAuthCookie" để thiết lập cookie. Sự khác biệt là gì? –

7

Như một mặt lưu ý, tôi thấy rằng sau khi sử dụng phương pháp JRO của mà làm việc tốt +1,() phương pháp FormsAuthenication.SignOut đã không làm việc khi gọi từ một tên miền phụ khác hơn www /. (Tôi đoán vì tài sản .Domain không phù hợp) - Để làm được việc này tôi đã sử dụng:

if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
      { 
       HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); 
       myCookie.Domain = "parent.com"; 
       myCookie.Expires = DateTime.Now.AddDays(-1d); 
       Response.Cookies.Add(myCookie); 
      } 
7

Trong Ngoài việc thiết lập một cookie hơn tên miền cha cũng cần phải đảm bảo rằng tất cả các trang web (ứng dụng) có cùng một validationKey và decryptionKey() để tất cả chúng đều nhận ra vé xác thực và cookie của nhau. bài viết khá tốt ở đây http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

3

2 điều cần được thực hiện:

  1. MachineKey nên giống nhau trong mọi web.config (tên miền chính và miền phụ (s))
  2. tên miền AuthenticationCookie nên giống nhau.

Làm theo bài viết following để biết thêm chi tiết.

4

Câu trả lời của Jro hoạt động tốt. Nhưng hãy đảm bảo cập nhật xác thực biểu mẫu webconfig setting "domain" , nếu không biểu mẫu xác thực sẽ không hoạt động bình thường. Here là vấn đề đăng xuất mà tôi gặp phải. Thủ thuật ở đây là phải có '.' làm tiền tố khi tên miền được đặt cho cookie là ".parent.com" (sử dụng trình kiểm tra cookie).

<authentication mode="Forms">   
     <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com" name="FormAuthentication" path="/"/> 
    </authentication> 
Các vấn đề liên quan