2015-06-03 19 views
6

Tôi đang sử dụng Nhà cung cấp phiên làm việc bộ nhớ cache Redis trong ứng dụng MVC của tôi. Tất nhiên, tất cả các thiết lập cho nhà cung cấp đều có trong Web.config của tôi. Ứng dụng hoạt động nếu tôi chỉ cần đặt Host và Key và tất cả những gì trong chuỗi đơn giản, vì vậy nó trông như thế này:Cách tốt nhất để ẩn giá trị cho nhà cung cấp sessionState

<sessionState mode="Custom" customProvider="MySessionStateStore"> 
     <providers> 
      <add 
      type="Microsoft.Web.Redis.RedisSessionStateProvider" 
      name="MySessionStateStore" 
      host = "[HOST]" 
      port = "6379" 
      accessKey = "[KEY]" 
      ssl = "false" 
      throwOnError = "true" 
      retryTimeoutInMilliseconds = "5000" 
      databaseId = "0" 
      applicationName = "TRAXProSurvey" 
      connectionTimeoutInMilliseconds = "5000" 
      operationTimeoutInMilliseconds = "1000" 
      /> 
     </providers> 
    </sessionState> 

... nơi "[HOST]" và "[KEY]" là thay vào đó giá trị thực tế. Nhưng đó không phải là chính xác an toàn, phải không? Có cách nào để che giấu thông tin đó bằng cách nào đó không?

Tôi biết việc sử dụng Cài đặt ứng dụng trong cấu hình Azure - thực ra tôi đang sử dụng cặp vợ chồng cho một thứ khác. Nhưng tôi không tìm cách để có thể sử dụng những người ở đây một cách cụ thể. Tôi có thể tạo biến cài đặt ứng dụng, nhưng cách truy cập giá trị đó trong sessionState là gì ?? Tôi đã thử sử dụng System.Configuration.ConfigurationManager.AppSettings ("[name]") - chỉ có vậy, với dấu ngoặc kép, và rằng với dấu nháy đơn.

I figured có lẽ tôi chỉ mã hóa Web.config .... tôi thấy rằng bạn có thể thêm "< 'MSDeployEnableWebConfigEncryptRule'> đúng < '/ MSDeployEnableWebConfigEncryptRule'>" (không có dấu nháy đơn) trong .pubxml - nhưng không hoạt động cho các trang web Azure thông thường.

Tôi cũng tìm thấy các bài viết/ví dụ để mã hóa các phần của Web.config bằng cách sử dụng aspnet_regiis .... nhưng làm điều đó sẽ không hoạt động trong môi trường trang trại như Azure, phải không?

Vậy các tùy chọn khác (nếu có) là gì? ... hay điều này là không thể? Cảm ơn bạn!

Trả lời

4

Bạn có thể sử dụng Cài đặt ứng dụng để cung cấp cấu hình trạng thái phiên Redis như dưới đây.

Ví dụ: chúng tôi muốn đặt máy chủ và accessKey trong cài đặt ứng dụng.

<appSettings> 
    <add key="SomeHostKey" value="actual host value" /> 
    <add key="SomeAccessKey" value="actual access key" /> 
</appSettings> 

bạn có thể chọn bất kỳ chuỗi nào làm 'khóa' bên trong cài đặt ứng dụng. bạn có thể đặt cài đặt ứng dụng từ cổng thông tin.

Bây giờ, sử dụng phím này là giá trị trong web.config như dưới đây:

<sessionState mode="Custom" customProvider="MySessionStateStore"> 
     <providers> 
      <add 
      type="Microsoft.Web.Redis.RedisSessionStateProvider" 
      name="MySessionStateStore" 
      host = "SomeHostKey" 
      port = "6379" 
      accessKey = "SomeAccessKey" 
      ssl = "false" 
      throwOnError = "true" 
      retryTimeoutInMilliseconds = "5000" 
      databaseId = "0" 
      applicationName = "TRAXProSurvey" 
      connectionTimeoutInMilliseconds = "5000" 
      operationTimeoutInMilliseconds = "1000" 
      /> 
     </providers> 
    </sessionState> 

Bạn có thể cung cấp tất cả các thông số bằng cách cài đặt ứng dụng nếu bạn muốn. bạn có thể cung cấp vài thông số theo cài đặt ứng dụng và còn lại theo web.config như bạn muốn. Nhà cung cấp trạng thái phiên sẽ tìm thấy nếu bạn đang cung cấp giá trị thực tế hoặc khóa cài đặt ứng dụng trong web.config.

+0

Vì vậy, trong trường hợp này, nó chỉ đơn giản là khóa của thiết lập trong dấu ngoặc kép ?! Quá dễ! – Andarta

+0

Vâng, đúng vậy. Khóa cài đặt ứng dụng trong dấu ngoặc kép. –

+0

Xin lưu ý rằng bạn không thể ghi đè lên các cài đặt này trong cổng thông tin. ngay cả khi bạn cung cấp cài đặt ứng dụng bằng cùng một khóa, giá trị trong web.config vẫn sẽ được sử dụng. – MPavlak

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