当前位置: 首页 > 面试题库 >

使用公共构建服务器时如何使用秘密API密钥

方博学
2023-03-14
问题内容

马克·墨菲(Mark Murphy)在他的博客上很好地说明了应将哪些信息排除在公共存储库之外。密钥材料(例如用于各种服务的OAuth密钥或API密钥)就是一个很好的例子。

有问题的应用程序将是移动android应用程序,因此有人对其进行反编译以获取秘密密钥不在此问题范围内。

如何配置公共CI实例(例如cloudbees)上的构建作业,以使机密不泄漏到构建日志或编译目录中?我的主要目的是演示基于OAuth身份验证的应用程序的体系结构和构建过程,而无需在整个Internet上分发我的私钥。因此,需要一个公共代码存储库和一个公共可见的构建服务器。

当前,我在Java代码中使用maven过滤和占位符来创建静态常量类,但这些类在目标目录中始终可见。目标的生成后清理仍会留下一小段时间,在该时间段内,生成的Java文件对世界都是可见的。


问题答案:

从您的描述看来,您似乎在谈论一个密钥,该密钥不应在SCM存储库中,而需要包含在最终应用程序中。大概应用程序二进制文件本身不能免费下载,否则无论如何都可以将其打开并获取您的密钥,但是如果仅将构建结果部署到某些服务器上就可以了。

在这种情况下,只要密钥在target目录(即Jenkins工作区)中或在构建构件(例如lastSuccessfulBuild/artifact/target/myapp.war)中存在,就没有任何问题,只要这些内容不是公共可读的即可。对于CloudBees
DEV @ cloud
Jenkins实例,您可以使用基于角色的访问控制来允许公众查看您项目的变更日志,甚至可以查看构建日志(在审核以确保未打印机密信息之后),但拒绝访问工作空间和工件。

(就工件读取权限而言,似乎将其授予具有总体读取权限的任何人,除非运行Jenkins,-Dhudson.security.ArtifactsPermission=true而托管Jenkins则不选择这样做。可能需要创建一个启用此权限的插件,并且可能类似于现有的“
扩展读取权限”插件,也具有“删除工作区”权限。工作区浏览权限至少是Jenkins的标准组成部分,如果您不归档工件而是在成功构建结束时直接进行部署,则足够了。



 类似资料:
  • null 例如,轮转设定为7天。所以我在我的应用程序中编码每7天刷新一次...不好,因为很难精确计时。 另一种方法是,如果我的应用程序面临身份验证异常,只需刷新密码,建立一个新的连接,并重试应用程序逻辑。 行业标准是什么?

  • 我遇到了许多API,它们为用户提供了一个API密钥和一个秘密。但我的问题是:两者之间有什么区别? 在我看来,一把钥匙就足够了。假设我有钥匙,只有我和服务器知道。我用这个键创建了一个HMAC哈希,并进行了一个API调用。在服务器上,我们再次创建HMAC哈希,并将其与发送的哈希进行比较。如果是相同的,则呼叫经过身份验证。 那为什么要用两把钥匙呢? 编辑:或者该API密钥用于查找API机密?

  • 我试图保护Spring BootAPIendpoint。我希望只传递api密钥和秘密作为头的一部分来调用api。我尝试了这个链接中发布的代码。但是在头中使用授权调用api时拒绝访问。使用API key和secret保护Spring Boot API我想知道我应该作为头部的一部分传递什么,这样我就可以从API获得成功的响应。我做了以下步骤:我在application.properties中添加了以下

  • 4.4.1.2 创建/使用公共服务 公共服务是应该由未指定的大量应用使用的服务。 有必要注意,它可能会收到恶意软件发送的信息(意图等)。 在使用公共服务的情况下,有必要注意,恶意软件可能会收到要发送的信息(意图等)。 下面展示了如何使用startService类型服务的示例代码。 要点(创建服务): 将导出属性显式设置为true。 小心并安全地处理接收到的意图。 返回结果时,请勿包含敏感信息。 A

  • 问题内容: 我想使用公共密钥加密技术在JavaScript中加密,在PHP中解密。我一直在尝试找到可以完成此任务的库,但是遇到了问题。 我目前正在使用 openpgpjs ,但是我需要所有浏览器的支持,甚至测试页在唯一列为受支持的浏览器(Google Chrome)上都有错误。 关于最终目标的注意事项: TCP连接已受SSL保护。 此保护层的主要目的是防御有意或无意的Web服务器日志记录,崩溃转储

  • 我有一个秘密存储在使用Terraform模块部署的AWS秘密管理器中,该模块支持秘密循环。我没有访问那个模块的源代码,所以我不能修改它。我想使用Terraform禁用秘密旋转。我应该使用哪种资源?需要如下所示的所有3个参数,并且没有任何参数来禁用循环。属性接受1到365之间的值,因此传递0也不是一个选项。