Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ionic4/Angular项目中安全存储API密钥的位置_Angular_Ionic Framework - Fatal编程技术网

在Ionic4/Angular项目中安全存储API密钥的位置

在Ionic4/Angular项目中安全存储API密钥的位置,angular,ionic-framework,Angular,Ionic Framework,我有种感觉,我在这里问的问题类型是错误的,因为它在30秒内是不可谷歌搜索的。请让我知道 无论如何,我有我的environment.ts和environment.prod.ts都是用URL和api键设置到后端和第三方服务的。但我已经读到,将API密钥保存在那里是不安全的做法。我应该把它们放在哪里?如果它确实在其他地方,最简单的方法是什么?如果我正确理解了您的问题,您将看到两个潜在的关键误用点: 开发人员在开发您的应用程序时可能会意外使用生产密钥—这很容易解决,方法是将您的密钥存储在CI管道中(假设

我有种感觉,我在这里问的问题类型是错误的,因为它在30秒内是不可谷歌搜索的。请让我知道


无论如何,我有我的
environment.ts
environment.prod.ts
都是用URL和api键设置到后端和第三方服务的。但我已经读到,将API密钥保存在那里是不安全的做法。我应该把它们放在哪里?如果它确实在其他地方,最简单的方法是什么?

如果我正确理解了您的问题,您将看到两个潜在的关键误用点:

  • 开发人员在开发您的应用程序时可能会意外使用生产密钥—这很容易解决,方法是将您的密钥存储在CI管道中(假设您有一个),并让它将正确的密钥注入到正确的环境配置中。一些可能感兴趣的工具:。然后,开发人员的代码库中将只包含开发密钥。请记住,如果您使用的是版本控制系统,那么仅仅删除生产代码并添加新的提交是不够的,因为有一些系统允许您在提交历史记录中搜索意外泄露的机密,因此您必须更改密钥

  • 用户可以对你的应用程序进行反向工程,并从代码中提取密钥。这个问题很难解决,因为它在很大程度上取决于操作系统、版本以及如何处理机密。通常,您希望完全避免在应用程序中存储机密,而是在验证用户时获取机密。在这之后,您将利用您的目标操作系统功能(请记住这一点)。对于第三方访问,考虑通过服务器代理请求来隐藏密钥,可以找到更多的启示

  • <强> 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点