南特,跳马和Windows集成身份验证
-
21-08-2019 - |
题
我想用的Nant(V0.86.3317.0)执行多个在SourceGear保险柜(V4.1.4)的任务。
有什么办法,我们可以得到Vault可以使用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" />
由于我的工作与其他开发项目,硬编码的用户名和密码进入南特构建文件是不是一个好主意。既username
和password
需要选择在vaultsetloginoptions
命令。
其它替代(全用卡子)包括:
(a)中硬编码“管理”帐户到的Nant性能和在使用该记录保管库。这是没有那么大,因为我们再松的谁负责入住/退房行动的恶性脚本执行的审计线索。它也可引起问题当溶液签出的文件(脚本的一部分,确保所有文件都产生在保险柜的标签之前,重新检入源控制)。
(二)从南特代码使用C#脚本来设置用户名和密码的性质动态......除了我们便起身从用户获取密码仍是一个问题。
(c)读取从Vault客户端的存储的简档信息,并使用该连接(除我不知道它的存储位置)。
感谢您的考虑。
解决方案 2
我已经成功实施了样机的工作,解决此问题。
全部信号源和用于下面描述的解决方法的二进制文件可以在这里找到:
我已经创建了一些自定义楠任务和功能。
<VaultLogin>
检查Windows注册表的用户名和密码信息预先存储。如果没有找到它提示了登录窗口中的用户。它存储在两个功能中的条目,并清除注册表(如果登录失败 - 见下文<SaveVaultLogin>
):
${VaultLoginFunctions::UserName()}
${VaultLoginFunctions::Password()}
在<vaultsetloginoptions>
任务然后能够使用的功能:
<vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />
调用<vaultsetloginoptions>
任务后,就可以调用它写入用户名和密码的值改回注册表的<SaveVaultLogin>
任务。这确保了只有成功的认证信息被存储(如脚本在任务失败时,如果用户名和密码不正确。
这是码块放在一起:
<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 />
更新:链接二进制文件和源变通现在在柱的顶部
其他提示
我不熟悉Vault,以便请原谅这个答案的潜在模糊性。我已经与南特是被执行了很多,什么(任务,高管等)具有内在潜力是在集成身份验证模式下运行的工作。
在结束时,认证被沿着取其用户碰巧运行父恶性过程通过。话虽这么说,这可能是一个迹象,表明Vault的恶性任务不会的支持的集成身份验证?也就是说,如果在 vaultsetloginoptions 任务的需要的用户和密码参数,再有就是沿着凭据传递没有什么好办法(正如你所指出)。
如果刚好有没有的解决方法的为缺乏Vault的恶性任务的潜力有可能使用的 <exec
> 任务来调用它们的客户端工具的命令行版本(甚至不知道他们是否有一个)。如果这是一个选项,综合验证将自动只要运行恶性过程的用户是相同的一个需要连接到保险柜踢英寸
我们必须为我们在我们的构建过程集成的几件事情做到这一点。我们要么exec'd了命令行版本或通过扩展的恶性框架编写我们自己的任务(一个或多个)。无论哪种方式,这应该是可能的。
更新
在库论坛做了一些环顾四周,似乎 AD集成的仅仅是一个办法让Vault客户端提示用户并一起传递给服务器。 从论坛:
在Vault客户端将总是提示 对于用户名/密码。我们的广告 整合仅限于服务器 验证密码进入 匹配在Active密码 目录。
因此,不存在的真方式为客户端沿着窗户认证信息传递一个内置方式。在AD模式下运行时Vault客户端程序需要一个输入用户名和密码。可悲的是,它似乎不存储用户名/密码,无缝的几率的恶性整合是一个远镜头。
看着斯科特·萨阿德的建议后,遗憾的是似乎是在命令行工具没有选择或者使用Windows身份验证来调用它。
我的当前的想法是符合上述(b)。
我将创建一个可从南特脚本调用库,询问当前的Windows用户的保险柜用户名和密码。
该库将寻找在先前输入的用户名库和登录此Windows用户resigstry条目。如果它存在,它将被传递给脚本无需任何用户交互。
如果这个用户名/密码失败保管库登录,或如果不存在,它的库将提供一个对话框用于用户输入当前的保管库的用户名和密码。
在用户的条目将被存储在注册表(加密的)含义这应该只有每次保管库的用户名和密码的变化被输入一次。
不是一个理想的解决方案,但应该是相对直接的和可接受的足够的工作周围。
你怎么认为呢?