2016-10-19 37 views
8

Tôi cố gắng tìm ra nơi để lưu trữ các bí mật sản xuất ứng dụng tốt nhất cho ứng dụng ASP.NET Core. Có hai câu hỏi tương tự Where should I store the connection string for the production environment of my asp.net-5 app?How to deploy ASP.NET Core UserSecrets to production cả hai đều khuyên bạn nên sử dụng biến môi trường.Lưu trữ các bí mật sản xuất trong ASP.NET Core

Vấn đề của tôi là tôi muốn chạy một vài phiên bản ứng dụng web của tôi với các cơ sở dữ liệu khác nhau và các thông tin cơ sở dữ liệu khác nhau. Vì vậy, cần có một số cấu hình cho mỗi cá thể bao gồm cả bí mật.

Làm cách nào để đạt được điều này một cách an toàn?

Lưu ý rằng ứng dụng sẽ có thể tự lưu trữ và lưu trữ trong IIS! (Sau đó chúng tôi cũng có kế hoạch để chạy nó trên Linux nếu đó là của bất kỳ quan trọng đối với các câu hỏi)

Cập nhật

câu hỏi này không phải là về cố gắng sử dụng những bí mật sử dụng ASP.NET trong sản xuất! UserSecrets được loại trừ để sản xuất.

+0

liên quan đến bí mật của người dùng: bạn không thể sử dụng UserSecrets để sản xuất ít nhất, công cụ quản lý mật khẩu không mã hóa bí mật được lưu trữ và không được coi là cửa hàng đáng tin cậy. Nó chỉ dành cho mục đích phát triển. Các khóa và giá trị được lưu trữ trong tệp cấu hình JSON trong thư mục hồ sơ người dùng. – Set

+0

Tôi không muốn sử dụng UserSecrets, đó là toàn bộ vấn đề của câu hỏi của tôi! Tôi sẽ chỉnh sửa câu hỏi của mình ... – NicolasR

Trả lời

3

Khi họ nêu, bí mật của người dùng là chỉ để phát triển (để tránh vô tình nhập thông tin xác thực vào SCM) và không dành cho sản xuất. Bạn nên sử dụng một chuỗi kết nối cho mỗi cơ sở dữ liệu, tức là ConnectionStrings:CmsDatabaseProduction, ConnectionStrings:CmsDatabaseDevelopment, v.v.

Hoặc sử dụng vùng chứa docker (khi bạn không sử dụng Dịch vụ ứng dụng Azure), bạn có thể đặt nó trên cơ sở vùng chứa.

Hoặc bạn cũng có thể sử dụng các tệp ứng dụng dựa trên môi trường. appsettings.production.json, nhưng chúng không được bao gồm trong quản lý kiểm soát nguồn (Git, CSV, TFS)!

Trong khi khởi động chỉ làm:

public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
      .AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 

Bằng cách này, bạn có thể tải công cụ cụ thể từ appsettings.production.json và vẫn có thể ghi đè lên nó thông qua biến môi trường.

+0

Tôi biết vấn đề với bí mật của người dùng trong suốt thời gian phát triển. Nhưng đó không phải là vấn đề ở đây, tôi chỉ nói về thời gian sản xuất! Các tệp cài đặt môi trường không giúp ích bởi vì nó sẽ vẫn giống nhau đối với mỗi cá thể trong các biến môi trường sản xuất và ghi đè sẽ vẫn như cũ đối với tất cả các phiên bản! Bây giờ tôi chưa đủ về Docker nhưng có lẽ ý tưởng đó có thể giúp ích. – NicolasR

+1

@NicolasR: Không nhất thiết. Bạn sẽ có một application.production.json cho mỗi lần cài đặt. Nếu bạn có ứng dụng của mình trong 3 thư mục khác nhau, bạn có thể đặt mỗi 'applciation.production.json´ thành giá trị mong muốn. Bạn chỉ cần chắc chắn loại trừ 'applciation.production.json 'khỏi điều khiển nguồn, bởi vì nó bây giờ chứa dữ liệu nhạy cảm. – Tseng

+1

Ngoài ra còn có 'Microsoft.Extensions.Configuration.CommandLine' có thể đọc cấu hình từ tham số dòng lệnh, nhưng không dễ sử dụng trong ASP.NET Core khi bạn xây dựng cấu hình của mình bên trong lớp Startup và bạn không có quyền truy cập dễ dàng từ đây đến tham số 'args' được chuyển đến phương thức' Main' – Tseng

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