前言

在開(kāi)發(fā)中經(jīng)常會(huì)用到一些敏感數(shù)據(jù),比如AppSecret或數(shù)據(jù)庫(kù)連接字符串,無(wú)論是硬編碼還是寫在配置文件中,最終都要push到svn或git上。對(duì)于開(kāi)源項(xiàng)目,這些敏感數(shù)據(jù)就無(wú)隱私可言了,對(duì)于私有項(xiàng)目,一旦源代碼管理服務(wù)器被黑,這些敏感數(shù)據(jù)也將暴露無(wú)遺。所以,最佳實(shí)踐就是不要將敏感數(shù)據(jù)寫到源代碼中。

以往我們常常將數(shù)據(jù)庫(kù)連接字符串寫在web.config中,.NET Core中寫在appsettings.json中,開(kāi)發(fā)環(huán)境下如果一個(gè)開(kāi)發(fā)者修改了連接字符串,為了不影響其他開(kāi)發(fā)者,每次提交代碼的時(shí)候就應(yīng)該忽略該配置文件,如果還添加了其他配置,必須提交的話,要么先撤銷連接字符串的修改再提交,要么直接提交會(huì)影響其他開(kāi)發(fā)人員。很多時(shí)候,我們就是直接提交了,大不了其他開(kāi)發(fā)者pull下來(lái)代碼再修改一下。但是,最佳實(shí)踐就是不要寫在配置文件中。

注意,上面提到的問(wèn)題都是在開(kāi)發(fā)環(huán)境下。

Secret Manager

.NET Core中為我們提供了叫Secret Manager的工具,可以實(shí)現(xiàn)上文中的最佳實(shí)踐,再次強(qiáng)調(diào)一次,Secret Manager只適用于開(kāi)發(fā)環(huán)境中。

下面說(shuō)一下Secret Manager,它幫我們抽象了一些細(xì)節(jié),比如數(shù)據(jù)存儲(chǔ)在哪以及如何存儲(chǔ)的問(wèn)題。簡(jiǎn)單來(lái)說(shuō)它幫助我們將數(shù)據(jù)以明文的形式存在了本地的一個(gè)json文件中。系統(tǒng)不同存儲(chǔ)的位置也不一樣。

Windows

%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json

Linux

~/.microsoft/usersecrets/<userSecretsId>/secrets.json

Mac

~/.microsoft/usersecrets/<userSecretsId>/secrets.json

userSecretsId是在.csproj文件中指定的,會(huì)在下文講到。

安裝、使用

配置User Secrets及訪問(wèn)需要用到兩個(gè)包,分別為

Microsoft.Extensions.SecretManager.Tools
        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式