Jan*_*zki 6 c# json github .net-core asp.net-core
在开发 ASP.NET core 3 应用程序期间存储机密(例如 API 密钥和密码)的推荐方法是使用用户机密。虽然这种方法效果很好,但我确实有一个包含RSA key 的多行字符串。密钥是从提供的.pem复制的文件复制的。
有没有什么简单的方法可以将密钥存储在secrets.json?
问题似乎是json不支持多行字符串。因此,简单地将密钥复制到文件中是行不通的。诸如对密钥的不同行使用数组之类的解决方法与类不能很好地配合Configuration,并将检索到的秘密绑定到Options类。
我发现一旦我将密钥转换为单行字符串,它就可以工作。然而,在我看来,需要一个单独的工具将密钥从多行转换为单行,这似乎太复杂了。
顺便说一句,我确实需要这个来构建GitHub-App。
没有什么可以阻止您使用带有用户机密的多行字符串。可以直接传一份给dotnet user-secrets
例如,某些 Powershell 使用此处字符串:
$multiVal = @"
Your
Multi-line
Text
"@
dotnet user-secrets set "YourKeyName" "$multiVal"
Run Code Online (Sandbox Code Playgroud)
或者嵌入换行符 `n:
dotnet user-secrets "YourKeyName" "Your`nMulti-line`nValue"
Run Code Online (Sandbox Code Playgroud)
或者您可以读取整个基于文本的文件:
$fileName = "/path/to/file"
$multiVal = Get-Content $fileName -Raw
dotnet user-secrets set "YourKeyName" "$multiVal"
Run Code Online (Sandbox Code Playgroud)
JSON 字符串属性还允许“多行”文本,只是不是按照您想象的方式。字符串属性内部的文字字符\和n一起将被反序列化为换行符。例如,以下 JSON 具有一个带有多行值的字符串属性:
{
"YourKeyName": "Your\nMulti-line\nText"
}
Run Code Online (Sandbox Code Playgroud)
您可以通过多种方式实现此目的,例如手动查找和替换或使用 Notepad++ 等工具。您还可以再次使用一些 Powershell:
{
"YourKeyName": "Your\nMulti-line\nText"
}
Run Code Online (Sandbox Code Playgroud)
编辑:您提到其中一个参数在最后一个示例中不起作用。您可能正在运行旧版本的 powershell(3.0 之前的版本)。你可以尝试这个:
$inputFile = "/path/to/file"
$multiVal = Get-Content $inputFile -Raw
$obj = [pscustomobject]@{
YourKeyName = $multiVal
}
$outputFile = "/path/to/secrets.json"
$obj | ConvertTo-Json -Depth 50 | Out-File -FilePath $outputFile
Run Code Online (Sandbox Code Playgroud)
现在,关于 RSA 密钥,根据此答案及其注释,虽然 RSA 规范要求在 base-64 编码的有效负载中换行,但实现可能允许不符合要求。这意味着,根据您使用它的方式,您可能能够完全删除换行符。你必须尝试一下才能确定。
编辑:事实证明,dotnet user-secrets有一个已知的错误,其中值不能有前导-。现在已修复,但我认为仅适用于 5.0+。我发现领先的空间是有效的,我认为RSA提供商不应该对此犹豫。以下应该有效:
$inputFile = "/path/to/file"
# no -Raw flag
$multiVal = (Get-Content $inputFile | Out-String)
# or alternatively
$multiVal = [System.IO.File]::ReadAllText($inputFile)
$obj = [pscustomobject]@{
YourKeyName = $multiVal
}
$outputFile = "/path/to/secrets.json"
# use redirection instead of Out-File
($obj | ConvertTo-Json -Depth 50) > $outputFile
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2174 次 |
| 最近记录: |