在客户端 - 服务器构建之间共享秘密的良好策略

时间:2016-12-15 13:11:03

标签: security tfs build continuous-integration continuous-deployment

以以下案例为例。

您使用OAuth2保护了RESTful API层。另一方面,要让用户针对您的API进行身份验证,您需要请求访问令牌(即grant_type=password)。

要申请密码访问令牌,客户端应用需要OAuth客户端(密钥+密钥对)。

现在您已将所有内容配置为使用持续集成持续部署

在开发构建期间,构建脚本会创建测试数据,包括 OAuth客户端。显然,如果构建创建测试数据,它先前会丢弃在自动化测试期间创建的所有数据。

因此,您希望您的客户端应用程序使用其中一个 OAuth客户端,并且您希望避免对其中一个进行硬编码,因为它们是使用API​​基础结构创建的,因此它们是在每个版本中从头开始创建。

认为前端和后端是由不同的构建脚本构建的。

结论&问题

在服务器和客户端基础架构之间共享机密的好方法是什么,所以它们都启动并运行与相同的安全机密同步?

一些想法

  1. 操作系统环境变量。我可以将这些秘密存储在构建机器环境变量中。也就是说,客户端基础架构将始终使用最新的秘密进行构建和部署。

  2. 与#1相同,但将这些机密存储在构建机器的共享目录中。

2 个答案:

答案 0 :(得分:0)

关于TFS / VSTS构建(TFS 2015或更高版本)/发布(TFS 2017或VSTS)系统,您只需要在构建定义或发布环境的选项/常规选项卡中选中允许脚本访问OAuth令牌选项,然后您可以在每个任务中使用$(System.AccessToekn)来获取Access OAuth Token。

enter image description here

enter image description here

关于其他系统,更好的方法是将访问令牌存储在系统环境变量中并在最后删除它,这类似于使用"##vso[task.setvariable variable=testvar;]testvalue"的其他构建/发布任务的共享变量值(PowerShell) )在TFS或VSTS中。

另一方面,您可以在系统环境中存储加密的访问令牌以确保安全性,然后解密并使用它。

答案 1 :(得分:0)

最后,我最终使用公共构建目录来存储具有最新凭据方法的JSON文件,其中两个构建都可以访问它。每个后端构建运行都会持久化包含整个凭据的JSON文件,并且前端构建依赖于整个文件。

无论如何,我尝试了环境变量的方法,但由于两个版本都在同一个TFS构建代理上运行,因此除非重新启动整个代理服务,否则客户端构建无法看到环境变量的更改。