【问题标题】:Access Secret Variables in Visual Studio在 Visual Studio 中访问秘密变量
【发布时间】:2017-01-19 22:13:56
【问题描述】:

我正在使用 Team Services 存储敏感数据,而不是在我的代码中硬编码。

假设我在变量中定义:my_secret 为 name 和 12345 为 value

如何在我的代码中访问该变量?

在上面的示例中,如何在我的代码中访问password?

有一个文档here,但他们没有提到如何在代码中使用变量。

【问题讨论】:

  • 你能告诉我们存储数据的代码吗?
  • 更新了我的问题
  • @ln9187 将来,您可能希望使用@ 来确保人们看到您的消息。 Eric 看到它是因为他是帖子的唯一评论者,但情况并非总是如此 :) 请注意,如果我们在页面上,则会出现“此帖子已被编辑”栏。
  • 我认为您误解了这些内容的用途。秘密构建变量用于“我的构建系统将构建的可执行文件上传到需要密码的服务器”之类的东西。你不能从你的代码中访问秘密。您可以在构建系统执行自定义构建步骤时访问它们。
  • 如果您正在寻找从 C# 程序以加密格式存储敏感用户数据的机制,也许这就是您正在寻找的? msdn.microsoft.com/en-us/library/ms229741(v=vs.110).aspx 但实际上你应该做一个威胁模型,清楚地描述敏感数据,它的用途,谁应该和不应该访问它,违规的后果是什么,数据的生命周期是多少,等等。考虑聘请威胁建模专家;这不适合安全新手。

标签: c# visual-studio azure-devops


【解决方案1】:

如果您想在构建步骤中访问秘密变量(例如,在基于 PowerShell 的自定义构建任务中),通常您会使用该秘密变量作为任务的输入参数,然后使用 VSTS Task SDK 的函数Get-VstsInput 如下:

$pwd = Get-VstsInput -Name "Input_Name_In_Task.json_File"

然后您可以将其转换为 SecureString,如下所示

$securePwd = ConvertTo-SecureString $pwd -AsPlainText -Force

并最终在新的System.Management.Automation.PSCredential 对象中使用它。

【讨论】:

    【解决方案2】:

    变量通常作为环境变量传递给构建。然而秘密不是默认的,你可以在你的工具的参数中显式使用它们,比如MyTool.exe $(password)。

    【讨论】:

    • 这就是非机密构建变量的工作方式。问题是关于秘密变量。您不想将数据库密码放入任何人都可以看到的环境变量中。
    • @EricLippert 感谢您的更正,我已经适当地更新了我的答案。
    【解决方案3】:

    这取决于您所说的“来自代码”的含义。例如,如果您要调用脚本,则可以将秘密作为参数传递。

    例如,这里有一个 JSON 格式的构建定义。

    {
      "build": [
        {
          "enabled": true,
          "continueOnError": false,
          "alwaysRun": false,
          "displayName": "PowerShell Script",
          "timeoutInMinutes": 0,
          "task": {
            "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
            "versionSpec": "1.*",
            "definitionType": "task"
          },
          "inputs": {
            "scriptType": "inlineScript",
            "scriptName": "",
            "arguments": "-Baz $(Baz)",
            "inlineScript": "param($Baz)\nWrite-Host \"1\" \nWrite-Host \"$($env:Foo)\" \nWrite-Host \"2\" \nWrite-Host \"$($env:Baz)\"\nWrite-Host $Baz",
            "workingFolder": "",
            "failOnStandardError": "true"
          }
        }
      ],
      "variables": {
        "foo": {
          "value": "bar"
        },
        "baz": {
          "value": null,
          "isSecret": true
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 2020-11-03
      • 1970-01-01
      相关资源
      最近更新 更多