如何在静态网站中安全地存储API密钥

如何在静态网站中安全地存储API密钥,api,security,static,single-page-application,serverless,Api,Security,Static,Single Page Application,Serverless,我有一个SPA网站,托管在AWS s3中,由cloudfront提供服务 有多个CNAME连接到此网站,例如A.Mysite.com、B.Mysite.com 我有一个API,静态网站连接到它,如果请求来自A.Mysite.com,它只想为A提供内容,如果请求来自B.Mysite.com,它只想为B提供内容 我应该在哪里存储API密钥?我猜在客户端公开API密钥是个坏主意,对吗? 我已经浏览了OAuth、JWT令牌等。似乎无论以何种方式,如果没有服务器,我仍然必须向客户端发送访问密钥 请帮助我理

我有一个SPA网站,托管在AWS s3中,由cloudfront提供服务 有多个CNAME连接到此网站,例如A.Mysite.com、B.Mysite.com 我有一个API,静态网站连接到它,如果请求来自A.Mysite.com,它只想为A提供内容,如果请求来自B.Mysite.com,它只想为B提供内容

我应该在哪里存储API密钥?我猜在客户端公开API密钥是个坏主意,对吗? 我已经浏览了OAuth、JWT令牌等。似乎无论以何种方式,如果没有服务器,我仍然必须向客户端发送访问密钥


请帮助我理解这一点,因为我对在没有服务器的情况下如何实现静态站点和API之间的安全性感到非常困惑。

您研究过环境变量吗


这是不可能的。请求不会“来自A.Mysite.com”,而是来自客户端。您需要重新设计,以使某些代码不是静态的。您发送给客户的任何内容都可以被客户以任何方式使用。你不能阻止它。如果API密钥不是特别敏感,那么您可以使用模糊处理技巧(例如将密钥与一些特殊的复杂代码混淆),但它将无法经受任何严重的攻击。这个问题似乎是关于完全在客户端上运行的SPA,而没有服务器组件。这些链接适用于服务器端节点。啊,是的,你是对的。我认为可以在静态服务器配置(nginx)中设置env变量。你控制你的静态服务器吗?你使用什么服务?可能是这样的:没有服务器,只有s3。难道没有办法做到这一点吗?无服务器静态页面现在非常流行,为什么没有安全存储API密钥的解决方案呢?如果没有某种后端代码,就无法避免公开API密钥。您至少可以在任何FaaS提供程序(即使是免费的)中创建一个函数,并将其用作网关。在那里,您将检查您的情况并作出相应的反应。