2012-05-28 31 views
8

Tôi đã sử dụng WIF để xác thực trang web mới của chúng tôi, STS dựa trên việc triển khai bắt đầu.WIF- ID1014: Chữ ký không hợp lệ. Dữ liệu có thể đã bị giả mạo với

Để cho phép tính năng này hoạt động chính xác trên môi trường cân bằng tải ngoài, tôi đã sử dụng phần sau trong global.asax để ghi đè hành vi chứng chỉ mặc định.

void onServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e) 
     { 
      List<CookieTransform> sessionTransforms = new List<CookieTransform>(new CookieTransform[] 
      { 
       new DeflateCookieTransform(), 
       new RsaEncryptionCookieTransform(e.ServiceConfiguration.ServiceCertificate), 
       new RsaSignatureCookieTransform(e.ServiceConfiguration.ServiceCertificate) 
      }); 

      SessionSecurityTokenHandler sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly()); 
      e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler); 
     } 

Đây là tất cả làm việc chỉ cần tìm và nhân dân đã được sử dụng thành công hệ thống, tuy nhiên tất cả bây giờ và sau đó chúng tôi nhận được một luồng:

ID1014: Chữ ký không hợp lệ. Dữ liệu có thể đã bị giả mạo.

trong nhật ký sự kiện, vì vậy tôi đã bật tính năng theo dõi WIF và thấy những điều sau được đề cập trong nhật ký.

ID1074: CryptographicException xảy ra khi cố mã hóa cookie bằng API ProtectedData (xem ngoại lệ bên trong để biết chi tiết). Nếu bạn đang sử dụng IIS 7.5, điều này có thể do cài đặt loadUserProfile trên Hồ bơi ứng dụng được đặt thành false.

Tôi có cảm giác điều này đang dẫn tôi xuống một con hẻm tối tăm như tôi nghĩ vì tôi đã thay đổi việc triển khai để sử dụng RSA điều này không ảnh hưởng đến tôi.

Bất kỳ ý tưởng nào để giúp tôi?

+0

Cảm ơn bạn đã trả lời, đã tăng gấp đôi kiểm tra tất cả điều đó và nó hoạt động tốt có thể thấy điểm ngắt đang bị bẫy và cũng truy tìm được xuất. Tôi đã có FederatedAuthentication.ServiceConfigurationCreated + = onServiceConfigurationCreated; Khi bắt đầu ứng dụng. – RubbleFord

Trả lời

2

Tôi đã thay đổi cách triển khai để sửa đổi thời gian chờ trong phương pháp đã được xử lý. Điều này ngăn chặn việc phát hành lại.

protected override void OnSessionSecurityTokenCreated(Microsoft.IdentityModel.Web.SessionSecurityTokenCreatedEventArgs args) 
     { 
      args.SessionToken = FederatedAuthentication.SessionAuthenticationModule.CreateSessionSecurityToken(
       args.SessionToken.ClaimsPrincipal, 
       args.SessionToken.Context, 
       DateTime.UtcNow, 
       DateTime.UtcNow.AddDays(365), 
       true 
       ); 
      //base.OnSessionSecurityTokenCreated(args); 
     } 
+0

Ghi đè này làm gì chính xác về ngoại lệ bạn nhận được? – ABC

+0

Tôi xin lỗi tôi không thể nhớ, tôi sẽ phải xem xét trong codebase. – RubbleFord

+0

Cảm ơn, nếu bạn có cơ hội, bạn có thể cho tôi biết không? – ABC

0

Bạn đã thử đặt tùy chọn loadUserProfile thành true? Vấn đề vẫn còn xảy ra?

(Chọn nhóm ứng dụng trong IIS và sau đó nhấp vào "Cài đặt nâng cao" ở bên phải. "Tải hồ sơ người dùng" nằm trong phần "Mô hình xử lý").

+0

Chúng tôi đã không thử điều này hoàn toàn bởi vì chúng tôi đang sử dụng RSA không DPAPI. – RubbleFord

3

Cookie của trình duyệt được mã hóa bằng cơ chế "cũ" - DPAPI. Vì vậy, khi máy chủ cố gắng giải mã các cookie, nó không thành công - mã của bạn sử dụng RSA ngay bây giờ, không phải DPAPI.

Cách giải quyết khác, xóa bộ nhớ cache của trình duyệt và ứng dụng sẽ bắt đầu chạy như mong đợi.

+0

Chúng tôi chưa bao giờ sử dụng hệ thống khác vì chúng tôi đang ở trong môi trường cân bằng tải. – RubbleFord

0

Sự xuất hiện không liên tục của lỗi của bạn, kết hợp với ngoại lệ DPAPI hiển thị trong dấu vết cho thấy rằng bạn không thực sự ghi đè biến đổi cookie và dịch vụ của bạn vẫn đang sử dụng DPAPI.

Đây có thể là một cảnh quay dài, nhưng trong đoạn mã của bạn, tôi nhận thấy ghi đè phương thức "onServiceConfigurationCreated" bắt đầu bằng chữ thường o. Một lỗi đánh máy như vậy thực sự sẽ ngăn cản bạn ghi đè đúng hành vi WIF mặc định.

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