2015-05-20 17 views
6

Tôi có ứng dụng biểu mẫu web kế thừa và đang xây dựng một phiên bản MVC mới để thay thế nó. Cả hai cần phải chạy cạnh nhau một thời gian và tôi cần đăng nhập một lần để làm việc. Trước đây, người dùng đã đăng nhập thông qua ứng dụng biểu mẫu web và tôi đã có thể thiết lập thành công xác thực biểu mẫu sao cho ứng dụng MVC có thể xác thực thông qua cookie.Chia sẻ cookie xác thực OWIN giữa ASP.NET MVC và các ứng dụng Webforms với cùng một MachineKey

Biểu mẫu đăng nhập mới hiện đã hoàn tất trong ứng dụng MVC và người dùng giờ đây sẽ được yêu cầu đăng nhập từ các ứng dụng này. Ứng dụng MVC sử dụng Identity 2.x và OWIN. Ban đầu, tôi đã cố gắng định cấu hình cookie OWIN để khớp với cài đặt trong ứng dụng biểu mẫu web kế thừa nhưng không thể lấy ứng dụng biểu mẫu web để đọc cookie và xác thực người dùng.

Kể từ đó, tôi quyết định cài đặt Indentity 2.x và OWIN vào ứng dụng biểu mẫu web. Tôi đã thực hiện các cài đặt giống hệt nhau. Hết hạn là 30 phút và Tên miền là "" và Đường dẫn là "/". Tôi có thể thấy cookie được tạo ra từ ứng dụng MVC nhưng nó không được chọn bởi ứng dụng webforms. Tôi tiếp tục nhận được thông báo Từ chối Truy cập.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active, 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      CookieName = Settings.Default.CookieName, 
      CookiePath = Settings.Default.CookiePath, 
      CookieDomain = Settings.Default.CookieDomain, 
      LoginPath = new PathString(Settings.Default.CookieLoginPath), 
      ReturnUrlParameter = Settings.Default.CookieReturnUrl, 
      ExpireTimeSpan = Settings.Default.CookieExpireTimeSpan, 
      SlidingExpiration = Settings.Default.CookieSlidingExpiration, 
      Provider = new CookieAuthenticationProvider 
      { 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      } 
     }); 

Tôi đã để lại các cài đặt máy móc (trước đây đã hoạt động để xác thực biểu mẫu). Tuy nhiên, tôi đã xóa xác thực biểu mẫu khỏi cả hai tệp cấu hình.

Tôi đã định cấu hình sai một cái gì đó hoặc có cần cấu hình thêm để bật chia sẻ cookie OWIN giữa các ứng dụng có cùng một máy không?

CẬP NHẬT

  1. Tạo một ứng dụng webforms mới với User Accounts cá nhân.
  2. gia tăng các MachineKey
  3. Thay đổi cấu hình của MVC app chuẩn cài đặt (sao chép một dự án mới)

Ứng dụng webforms mới liệt kê các tập tin cookie nhưng sẽ vẫn không xác thực người dùng.

CẬP NHẬT Xem câu trả lời bên dưới.

Trả lời

2

Sau khi tạo hai ứng dụng mới và làm việc này, tôi có một đường cơ sở và làm việc ngược từ đó cho đến khi tôi đạt được mục tiêu Đăng nhập một lần giữa các ứng dụng. Tôi đã khám phá ra nhiều thứ bao gồm;

  1. Không cần dấu MachineKey cho dấu đơn giữa ứng dụng 4.5 trở lên. <httpRuntime targetFramework="4.5"/> là tất cả những gì bạn cần.
  2. Tắt xác thực biểu mẫu
  3. Và quan trọng nhất là không cố gắng tích hợp Identity 2.x và OWIN theo cách thủ công bằng cách sao chép từ dự án cơ sở vì bạn có khả năng bỏ lỡ không gian tên hoặc tệp quan trọng. Dự án sẽ xây dựng và chạy và theo nghĩa đen lái bạn bonkers trong khi bạn cố gắng tìm thấy những gì bạn bị mất. Sử dụng gói nuget và xóa những gì bạn không cần.

Vì vậy, cuối cùng, tôi cần thêm Identity 2.x và OWIN vào ứng dụng biểu mẫu web cũ của mình, về cơ bản nâng cấp lên đường dẫn xác thực mới trong 4.5 để làm cho nó hoạt động.

Hy vọng bài đăng này giúp tiết kiệm cho ai đó một số thời gian và công sức quý báu.

CẬP NHẬT QUAN TRỌNG: Khi cố gắng triển khai trong IIS mặc dù bạn không có bất kỳ khóa máy nào được chỉ định trong cấu hình (và hoạt động cục bộ), nó sẽ không hoạt động khi được triển khai. Cuối cùng, tôi đã sử dụng ứng dụng MVC làm cha mẹ và ứng dụng biểu mẫu web cũ như một đứa trẻ và điều này yêu cầu rằng ứng dụng mẹ có cấu hình sau;

<machineKey decryptionKey="AutoGenerate" validationKey="AutoGenerate" /> 
+1

Cảm ơn bạn đã chia sẻ! Tôi đang đối mặt với những thách thức tương tự, bạn có bất kỳ mã nguồn nào mà bạn có thể chia sẻ với chúng tôi không? –

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