我有一个使用以下 AWS 凭证的 Angular 应用程序:
awsAccessKeyId
awssecretAccessKey
awsBucket
awsEndpointUrl
awsRegion
awsKey
我想将它们存储在应用程序的 environment.ts 文件中,但被告知这是一个坏主意。我还能在哪里存储它们?我在考虑Firebase,但只允许通过API调用与具有特定UID的经过身份验证的用户一起阅读文档。
正如您所说,将 AWS 凭证存储在前端 JavaScript 文件中是不安全的,因为任何可以访问您网站的人都可以公开读取它。
我建议你开发一个服务器端API,并从你的角度应用程序调用API。该 API 用于与 AWS 服务通信。这样,您就不必将 aws 凭证存储在静态网站中。
使用接口
创建一个 API 以与 AWS 服务通信。
用户登录
角度应通过登录进行保护,以允许用户根据身份验证服务(例如 Amazon Cognito(或您自己的身份验证 API 进行身份验证。用户成功登录后,身份验证服务将返回某种token
。您可以将此令牌存储在浏览器的Local Stoage
中。
调用您的 API
调用 API 终结点时,需要提供此令牌。API 应在允许调用继续之前验证令牌。
参考: https://www.techopedia.com/definition/27674/html5-local-storage
希望这有帮助。
不建议将此类凭据存储在环境文件中,因为通常环境文件会提交到 git 中。
1. 如果存储库是公共的,那么您的所有凭据都可供公共(误(使用。
2. 如果存储库是私有的,那么也可能会出现这样的情况,即多个人在同一个项目上工作,但只有极少数人需要这些凭据,而不是每个人都需要这些凭据。
3. 在您的情况下,如果您在前端获取 AWS 凭证,那么任何人都可以从网络选项卡(最简单的方法(获取这些凭证,并且能够(误(使用它。
您应该如何/在哪里存储此类凭据取决于您的使用案例。不可能有一个适合每个人需要的答案。尽管很少有好的方法:
1.将环境文件保留在存储库之外,并在需要时将其分发给开发人员。
2.就像您提到的,将其存储在单独的位置并在运行时获取它们。
3. 如果您有后端,则不要在前端获取凭据然后访问云服务,而是将凭据存储在后端,并通过后端访问云服务。(推荐(
还有许多其他方法可以解决这个问题,但它们也取决于这些项目。