簡體   English   中英

為什么我只在開發環境中使用用戶機密?

[英]Why should I use User secrets only in the Development environment?

我必須將密鑰保存在項目和存儲庫之外。 為此,我想使用用戶機密 但它寫在那里,

僅當應用程序在開發環境中運行時才調用AddUserSecrets,如以下示例所示

我無法理解或找不到原因。 為什么我不能在生產環境中使用它?

您可以在提供給User Secrets文檔的鏈接中找到它:

Secret Manager工具不會加密存儲的機密,也不應將其視為受信任存儲。 它僅用於開發目的。 鍵和值存儲在用戶配置文件目錄中的JSON配置文件中。

用戶機密基本上是用戶目錄中某處的JSOn文件。 這適用於你的開發者。 但是在生產系統上,值通常應該通過更多生產就緒配置系統注入,例如Environment Variablesappsettings.jsonazure keyvault Envsappsettings每默認情況下已經被激活。

我認為簡短的回答是,如果你願意,你可能會這么做,但這不是它的目的。

我的理解是,用戶秘密的主要目的是保持憑證不受源代碼控制。 在GitHub和雲之前的日子里,大多數開發人員只是在web.config中粘貼了所有憑據,而且大部分都可以。 然后很多人開始使用公共存儲庫和AWS,突然之間https://www.zdnet.com/article/trufflehog-high-entropy-key-hunter-released-to-the-masses/

現在有很多不同的工具來管理秘密,哪一個最適合你的需求是一個更難的問題,但你可以考慮:

  • 您使用的是訪問控制源控制嗎?
  • 您是構建和部署的雲還是內部部署?
  • 誰有讀取實時服務器的權限?
  • 您存儲的數據有多敏感?
  • 服務器上運行的其他應用程序是什么?

我只是在CreateDefaultBuilder方法中CreateDefaultBuilder並找到了這個,這可能是相關的:

if (hostingEnvironment.IsDevelopment())
{
    Assembly assembly = Assembly.Load(new 
              AssemblyName(hostingEnvironment.ApplicationName));

    if (assembly != (Assembly) null)
          config.AddUserSecrets(assembly, true);
 }

顯然你不必使用默認版本,你可以為所有環境添加秘密,但它確實存在。

這是一個僅限開發時間的工具。 在文件中存儲任何類型的秘密都是有風險的,因為您可能會意外地將其簽入。在生產中,您可以使用環境變量來保存機密(或任何其他更安全的機制)。

雖然環境變量是Web開發中最常用的選項之一,但有一些原因可能不是最佳方法:

1.流程隱含地可以使用環境,並且很難跟蹤訪問。 因此,例如,當您的錯誤報告包含您的秘密時,您可能會遇到這種情況

2.整個環境傳遞給子進程(如果沒有明確過濾)。 因此,您的密鑰可隱式地提供給可能使用的任何第三方工具。

所有這些都是今天像Vault這樣的產品變得流行的原因之一。

因此,您可以使用環境變量,但請注意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM