0

以下面的案例为例。在客户端 - 服务器构建之间共享秘密的好策略

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

为了请求密码访问令牌,客户端应用程序需要一个OAuth客户端(密钥+密钥对)。

现在您已配置好所有使用持续集成连续部署

在发展建立,在构建脚本创建的测试数据,包括OAuth用户端。显然,如果构建创建测试数据,则它先前会删除自动测试期间创建的所有数据。

所以你希望你的客户端应用程序使用的OAuth用户端之一,你想避免硬编码其中之一,因为他们使用的API的基础设施创建的,所以他们从头开始重新创建上每个版本。

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

结论&问题

什么是共享服务器和客户端架构之间的秘密,所以无论起床,用相同的安全机密运行同步的好办法?

一些想法

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

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

回答

0

最后,我用公共构建目录结束了存储具有最新凭证的JSON文件的方法,其中两个构建都可以访问它。每个后端构建运行都会保留包含完整凭据的JSON文件,并且前端构建依赖于整个文件。

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

0

关于TFS/VSTS建(TFS 2015年或更高版本)/释放(TFS 2017年或VSTS)系统,你只需要检查允许脚本访问OAuth令牌选项中选择生成定义或发布/常规选项卡环境,那么您可以通过在每个任务中使用$(System.AccessToekn)来获取Access OAuth令牌。

enter image description here

enter image description here

关于其它系统中,更好的方法是存储在系统环境变量访问令牌,并在结束时,其类似于用于其它版本所共享变量值中移除/通过在TFS或VSTS中使用"##vso[task.setvariable variable=testvar;]testvalue"(PowerShell)发布任务。

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

+0

嘿,谢谢你的努力。看起来你答案的第一部分根本不回答我的问题。我没有试图共享TFS访问令牌,而是分享我自己的基础架构所需的不记名令牌。另一方面,我正在尝试环境变量的方法,但是我的工作并不完善,因为既然客户端应用程序和后端都在同一个构建代理上工作,那么在重新启动代理之前,我无法看到updatedenvironment变量服务...所以我结束了序列化这些凭据到JSON,然后我将文件存储在一个共同的已知位置 –

+0

@MatíasFidemraizer将令牌序列化为JSON是好的,您可以发布答案。 –

+0

我明白了。我已经添加了它。无论如何,我感谢你的努力! –

相关问题