2012-01-13 33 views
6

Xem cập nhật ở phía dưới của câu hỏiỨng dụng ASP.NET 4.0 trong trang ASP.NET 2.0 có sử dụng cùng một cookie Mẫu Xác thực không?

Tôi có một ASP.NET 2.0 ứng dụng web (nói https://mysite.somedomain.com/) trong đó sử dụng hình thức xác thực. Tôi muốn tích hợp một ứng dụng web ASP.NET 4.0 trong trang web này, có trụ sở tại https://mysite.somedomain.com/NewApp/. Biểu mẫu Auth đang làm việc trên ứng dụng bên ngoài, nhưng ứng dụng bên trong đang từ chối cookie.

web.config trên bên ngoài (ASP.NET 2.0) ứng dụng web chứa:

<httpCookies requireSSL="true"/> 
<authentication mode="Forms"> 
    <forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All" 
      path="/" timeout="90" requireSSL="true" slidingExpiration="true"/> 
</authentication> 
<machineKey (same machine key is in both configs) 
    validation="SHA1" 
    decryption="AES"/> 
<authorization> 
    <deny users="?"/> 
    <allow users="*" /> 
</authorization> 

web.config trên khu vực nội (ASP.NET 4.0) ứng dụng web chứa:

<authentication mode="Forms"> 
    <forms name="MySiteWebAuth" loginUrl="/Login.aspx" protection="All" 
      path="/" timeout="90" requireSSL="true" slidingExpiration="true" 
      ticketCompatibilityMode="Framework20"/> 
</authentication> 
<machineKey (same machine key is in both configs) 
    validation="SHA1" 
    decryption="AES"/> 

Đây là mã trong Login.aspx.cs đặt cookie thành xác thực thành công:

FormsAuthenticationTicket ticket = 
    new FormsAuthenticationTicket(
     1, 
     ApplicationContext.User.Identity.Name, 
     DateTime.Now, 
     DateTime.Now.AddMinutes(90), 
     false, 
     ApplicationContext.User.Identity.SessionID.ToString() 
    ); 
HttpCookie cookie = 
    new HttpCookie(
     FormsAuthentication.FormsCookieName, 
     FormsAuthentication.Encrypt(ticket) 
    ); 

cookie.Path = FormsAuthentication.FormsCookiePath; 
cookie.HttpOnly = true; 
Response.Cookies.Add(cookie); 

Nếu tôi đăng nhập vào ứng dụng web bên ngoài, sau đó điều hướng đến một trang trong ứng dụng web bên trong, nó sẽ chuyển hướng đến trang đăng nhập và viết Forms authentication failed for the request. Reason: The ticket supplied was invalid. vào nhật ký sự kiện trên máy chủ.

Làm cách nào để tải xuống biểu mẫu ASP.NET 2.0 Forms Auth được chấp nhận bởi ứng dụng web ASP.NET 4.0 bên trong?

Cập nhật: Nó hoạt động trong HTTPS IIS 7.5, nhưng không hoạt động theo HTTPS IIS 7.0. Làm một số điều tra thêm.

Cập nhật 2: Chúng tôi đã áp dụng Server 2008 SP2 cho máy chủ cùng với bản vá gần đây cho DoS băm va chạm và kể từ đó chia sẻ cookie đã hoạt động.

+0

Nó có thể là giá trị đặt giải mã cùng và xác nhận giá trị thuộc tính (http://msdn.microsoft.com/en-us/library/w8h3skw9(v=VS. 100) .aspx) cũng như các phím chỉ để chắc chắn. Đây là một vấn đề giữa asp.net 1.1 và 2 – davidsleeps

+0

Chỉ cần thử rằng (và câu hỏi được cập nhật), cùng một kết quả. – geofftnz

Trả lời

1

Tôi giả sử bạn đọc điều này - http://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx - có thể xóa thuộc tính ticketCompatibilityMode khỏi ứng dụng 4.0 của bạn hoặc ít nhất đảm bảo chúng giống nhau.

+0

màu liên kết trình duyệt cho biết tôi đã có, nhưng đọc lại ... – geofftnz

+0

đã thêm miền = "thedomain" vào phần tử '', cùng một kết quả (Thông báo sự kiện: Xác thực biểu mẫu không thành công cho yêu cầu. Lý do: Vé được cung cấp không hợp lệ.) – geofftnz

+0

chúng tôi có nó hoạt động trên HTTP trên IIS7.5 (môi trường sản xuất là HTTPS/IIS7.0), chúng tôi chỉ đang thiết lập nó trong HTTPS trên 7,5 để loại bỏ điều đó. – geofftnz

4

Ngoài giữ gần như tất cả các giá trị nói trên cùng, bạn sẽ cần phải thiết lập thuộc tính compatibilityModemachineKey phần tử trong tập tin cấu hình 4.0 ứng dụng của:

<machineKey compatibilityMode="Framework20SP2" validationKey="THE_KEY" decryptionKey="ANOTHER_KEY" validation="SHA1" /> 
+0

THANK YOU FOR this! Tôi đã vật lộn với vấn đề tương tự này, và đây là những gì cố định nó cho tôi. –

0

Thêm appsetting này để cả hai web.config file:

thêm key = "aspnet: UseLegacyFormsAuthenticationTicketCompatibility" value = "true"

0

Bạn cần chắc chắn rằng cả hai ứng dụng có chìa khóa mã hóa tương tự trong file web.config

<machineKey 
     validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
     decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
     validation="SHA1" /> 

Forms Authentication Across Applications

Các vấn đề liên quan