在Ionic4/Angular项目中安全存储API密钥的位置
我有种感觉,我在这里问的问题类型是错误的,因为它在30秒内是不可谷歌搜索的。请让我知道在Ionic4/Angular项目中安全存储API密钥的位置,angular,ionic-framework,Angular,Ionic Framework,我有种感觉,我在这里问的问题类型是错误的,因为它在30秒内是不可谷歌搜索的。请让我知道 无论如何,我有我的environment.ts和environment.prod.ts都是用URL和api键设置到后端和第三方服务的。但我已经读到,将API密钥保存在那里是不安全的做法。我应该把它们放在哪里?如果它确实在其他地方,最简单的方法是什么?如果我正确理解了您的问题,您将看到两个潜在的关键误用点: 开发人员在开发您的应用程序时可能会意外使用生产密钥—这很容易解决,方法是将您的密钥存储在CI管道中(假设
无论如何,我有我的
environment.ts
和environment.prod.ts
都是用URL和api键设置到后端和第三方服务的。但我已经读到,将API密钥保存在那里是不安全的做法。我应该把它们放在哪里?如果它确实在其他地方,最简单的方法是什么?如果我正确理解了您的问题,您将看到两个潜在的关键误用点:
<强> UPD<强>以澄清您关注的RE用户交互,考虑此简化工作流:
1) 用户向您的后端/授权端点发出未经验证的请求,该端点将检查用户名、密码并返回令牌1(最好)
2) 您的应用程序将此令牌1存储在设备的本地存储中-这是用户将有权访问的唯一秘密,并且是特定于该用户的
3) 您的用户使用令牌1向您的/3rd party api proxy
4) 您的服务器将验证步骤3中的令牌1,并使用从未公开的令牌2向第三方发出实际请求
5) 您的第三方请求成功,您将数据返回给用户
使用此流,您的令牌2永远不会公开,并且您始终知道哪个用户请求访问第三方API(您可以添加日志记录、审核等等)。那里互联网上有很多关于如何设计这个东西的文章,我只是在这里概述了一些基本概念,希望能给你一些思考的东西。谢谢。这是一个非常低调的项目,所以我不想做任何花哨的事情,比如注入秘密(如果这是“花哨”)。所以我认为代理的事情是有道理的。不过我觉得有点奇怪,因为用户仍然可以。。。是的,你知道。但我想最终我要求的是某种逻辑上不可能的东西,那就是不泄露任何秘密,同时仍然让任何客户访问我的服务。我想你的回答解决了我的问题。对第2点(应用程序/系统设计)做一些额外的澄清:客户端应用程序不安全。故事的结尾。当您看到API指南上写着“保护您的开发密钥”时,可以将其解释为“不要将其放在前端代码库中”,原因是timur列出的2(对于网站,任何网络请求都可以通过开发工具进行检查)。我在这些场景中所做的是创建一个简单的服务器端应用程序,用我的开发密钥调用第三方API,我的web应用程序调用我的服务器端应用程序。完全同意关于开发最佳实践的第1点