【问题标题】:How can I get Vault to use Windows Authentication from NAnt?如何让 Vault 使用来自 NAnt 的 Windows 身份验证?
【发布时间】:2023-03-21 08:14:01
【问题描述】:

我想使用 NAnt (V0.86.3317.0) 在 SourceGear Vault (V4.1.4) 中执行一些任务。

有什么方法可以让 Vault 使用来自 NAnt 的 Windows 身份验证来创建连接?

我用来初始化保险库连接的 NAnt 块是:

<target name="InitialiseVaultSettings">
<echo>InitialiseVaultSettings</echo>
<vaultsetloginoptions user="${vault.Username}" password="${vault.Password}" URL="${vault.Host}" repository="${vault.Repository}" />
<vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />

由于我正在与其他开发人员一起开发该项目,因此将用户名和密码硬编码到 NAnt 构建文件中并不是一个好主意。 usernamepassword 都是 vaultsetloginoptions 命令中的必需选项。

其他替代方案(均带有渔获物)包括:

(a) 将“管理员”帐户硬编码到 NAnt 属性中并使用该帐户登录保险库。这不是很好,因为我们随后松散了谁负责 NAnt 脚本执行的签入/签出操作的审计跟踪。当解决方案检出文件时,它也会导致问题(部分脚本确保在 Vault 中生成标签之前将所有文件检入源代码控制)。

(b) 使用 NAnt 代码中的 C# 脚本来动态设置用户名和密码的属性...但我们仍然遇到了从用户那里获取密码的问题

(c) 从 Vault 客户端读取存储的配置文件信息并使用该信息进行连接(除非我不确定它的存储位置)。

【问题讨论】:

    标签: windows-authentication nant integrated-security sourcegear-vault


    【解决方案1】:

    我已经成功地实现了原型来解决这个问题。

    下面描述的解决方法的完整源代码和二进制文件可以在这里找到:

    Vault Login Extensions

    我创建了一些自定义的 NAnt 任务和函数。

    &lt;VaultLogin&gt; 检查 Windows 注册表中以前存储的用户名和密码信息。如果未找到,则会使用登录窗口提示用户。它将条目存储在两个函数中并清除注册表(以防登录失败 - 请参阅下面的&lt;SaveVaultLogin&gt;):

    ${VaultLoginFunctions::UserName()}
    ${VaultLoginFunctions::Password()}
    

    &lt;vaultsetloginoptions&gt; 任务随后可以使用这些功能:

    <vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />
    

    调用&lt;vaultsetloginoptions&gt; 任务后,我们调用&lt;SaveVaultLogin&gt; 任务,将用户名和密码值写回注册表。这确保只存储成功的身份验证详细信息(如果用户名和密码不正确,脚本将在任务中失败。

    这是放在一起的代码块:

      <target name="InitialiseVaultSettings">
    <echo>InitialiseVaultSettings</echo>
    
    <loadtasks assembly="CompassHealth.NAntExtensions.Tasks.dll" />
    
    <VaultLoginGet />
    <echo message="UserName = ${VaultLoginFunctions::UserName()}" />
    
    <vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />
    
    <vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />
    
    
    <!-- need to save the login here, as it is cleared once VaultLoginGet is called, this ensures that only correct username and password are stored -->
    <VaultLoginSave />    
    

    更新:现在在帖子顶部链接到二进制文件和解决方法的源代码。

    【讨论】:

      【解决方案2】:

      我不熟悉 Vault,所以请原谅这个答案可能含糊不清。我与 NAnt 合作过很多次,任何被执行的东西(任务、执行人员等)都具有在集成身份验证模式下运行的内在潜力。

      最后,身份验证会传递给恰好运行父 NAnt 进程的任何用户。话虽如此,这可能表明 Vault 的 NAnt 任务不支持集成身份验证?这意味着,如果 vaultsetloginoptions 任务需要用户和密码参数,那么就没有很好的方法来传递凭据(正如您所指出的)。

      如果碰巧没有解决方法 Vault 的 NAnt 任务可能缺少的可能性,则可以使用 &lt;exec> 任务来调用其客户端工具的命令行版本(甚至确定他们有没有)。如果这是一个选项,只要运行 NAnt 进程的用户与需要连接到 Vault 的用户相同,集成身份验证就会自动启动。

      对于我们在构建过程中集成的一些东西,我们不得不这样做。我们要么执行到命令行版本,要么通过扩展 NAnt 框架编写了我们自己的任务。不管怎样,这应该是可能的。

      更新

      在 Vault 论坛上四处看看,似乎 AD 集成 只是让 Vault Client 提示用户并传递给服务器的一种方式。 From the forum:

      Vault 客户端将始终提示 用于用户名/密码。我们的广告 集成仅限于服务器 验证输入的密码 与 Active 中的密码匹配 目录。

      因此,客户端没有true 方式以内置方式传递 Windows 身份验证信息。 Vault 客户端程序在 AD 模式下运行时需要输入用户名和密码。遗憾的是,在不存储用户名/密码的情况下,无缝 NAnt 集成的可能性很小。

      【讨论】:

      • 我已经初步了解了命令行保险库工具,但它似乎也没有提供“集成身份验证”选项。我会尝试在保险库论坛上发布答案,因为这似乎是一个合理的解决方法。我会及时向大家发布。谢谢。
      【解决方案3】:

      在查看 Scott Saad 的建议后,不幸的是,命令行工具中似乎没有选项可以使用 Windows 身份验证来调用它。

      我目前的想法与上面的(b)一致。

      我将创建一个可以从 Nant 脚本调用的库,询问当前 Windows 用户的 Vault 用户名和密码。

      库将在注册表项中查找先前输入的 Vault 用户名并登录此 Windows 用户。如果存在,它将被传递给脚本,无需任何用户交互。

      如果此用户名/密码无法登录 Vault,或者它不存在,则库将提供一个对话框供用户输入当前的 Vault 用户名和密码。

      用户的条目将存储在注册表中(加密),这意味着每次更改 Vault 用户名和密码时只需输入一次。

      不是一个理想的解决方案,但应该是相对简单的并且是足够可接受的解决方法。

      你怎么看?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-22
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        相关资源
        最近更新 更多