Tôi muốn điều chỉnh các phím máy một cách linh hoạt trong mã trong khi chạy, cho một trang web lưu trữ ASP.NET MVC 4 IIS.Khóa máy ASP.NET đặt mã số
Phím máy, mã hóa và khóa xác thực cũng như thuật toán sử dụng, được lưu trữ trong cơ sở dữ liệu. Thay vì đọc các giá trị từ tệp web.config
, tôi muốn chèn các giá trị đó trong khi khởi động ứng dụng và để cho hệ thống sử dụng các giá trị đó thay thế.
Có cách nào để thực hiện điều đó mà không phải thay đổi web.config
chút nào (chỉ thay đổi cấu hình bộ nhớ)?
Tôi đã thử truy cập phần cấu hình nhưng nó được đánh dấu là chỉ đọc và cũng được niêm phong, vì vậy tôi không thể ghi đè IsReadOnly()
. Tuy nhiên, có một setter
đó là một chỉ báo, với tôi, rằng có thể có một cách để có khả năng loại bỏ cờ chỉ đọc.
var configSection = (MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey");
if (!configSection.IsReadOnly())
{
configSection.ValidationKey = _platformInfo.MachineKey.ValidationKey;
configSection.DecryptionKey = _platformInfo.MachineKey.EncryptionKey;
...
}
Có cách nào để thực hiện việc này không? Cách thay thế duy nhất tôi có thể thấy là sử dụng một phương pháp tùy chỉnh như AppHarbor, tuy nhiên tôi thà gắn bó với cách tiếp cận tích hợp nếu có thể.
Trong trường hợp ai đó hỏi tại sao tôi muốn làm điều đó, lý do là, điều này là dành cho một số lượng lớn các trang web giống hệt nhau đang chạy trong webfarm. Do đó, có các khóa không được tạo tự động là phải (phải giống nhau trên mỗi máy chủ). Ngoài ra, mỗi trang web phải được phân lập và không được chia sẻ cùng một khóa. Vì tất cả các trang web đều giống hệt nhau về thể chất, chúng chia sẻ cùng một vị trí thực tế. Đó là lý do tệp web.config không thể chứa cài đặt ứng dụng cụ thể.
Chỉnh sửa: Sẽ rất hữu ích khi xác nhận, ít nhất, nếu đơn giản là không thể. Như đã nói, người ta có thể sử dụng các phương thức mã hóa và xác thực tùy chỉnh, điều này sẽ tránh được việc sử dụng các cài đặt khóa máy hoàn toàn. Cảm ơn.
thanks a lot, giúp tôi (và hy vọng những người khác nữa). Thông thường các trang web lớn hơn đang sử dụng các hồ bơi ứng dụng riêng biệt. Nhưng các trang web nhỏ hơn có khả năng chia sẻ một hồ bơi ứng dụng. Nhưng chính xác những gì tôi cần, như tôi có thể xây dựng xung quanh đó. – michael81
Cấu trúc của tệp cấu hình CLR tùy chỉnh có phải là "/configuration/system.web/machineKey" không?Có cách nào để hiển thị hoặc kiểm tra giá trị machineKey thực tế trên ứng dụng để xác nhận rằng tệp cấu hình CLR tùy chỉnh thực sự có hiệu lực đúng không? – John
Có. Bạn có thể sử dụng ConfigurationManager.GetSection ("system.web/machineKey"), đưa đối tượng được trả về về MachineKeySection và xem các thuộc tính treo của nó để xác minh rằng các thay đổi của bạn đã được chọn chính xác. – Levi