跨域API访问安全性



这是一个关于跨域API安全性的问题。问这个问题的最好方法是通过一个假设的例子。

  • 域名APIHOST.COM希望允许访问其资源到FRIENDLYSITE1.COM和FRIENDLYSITE2.COM(但不允许其他域名)
  • FRIENDLYSITEs由其他人拥有,APIHOST没有直接的服务器访问它们。它们可能运行任何服务器技术。他们愿意托管额外的内容,但不要太复杂。

当Bob使用他的web浏览器访问FRIENDLYSITE1.COM时,他访问FRIENDLYSITE1.COM(或APIHOST.COM)的凭据是无关的。安全应该在APIHOST.COM和FRIENDLYSITE1.COM之间处理。

我已经研究了所有的跨域请求技术(CORS, iFrames, JSONP),但它们都假设安全性应该来自浏览器Bob,而不是来自Bob正在访问的FRIENDLYSITE1.COM域。

是否有一种方法可以实现跨域API访问,在两个服务器之间处理安全性,而不涉及Bob和他的浏览器?

如果您想保护两台服务器之间的通信,那么您将需要使用安全传输(如https)并使用一些仅提供给您希望允许访问的站点的凭据。

如果您愿意,这些凭证可以像用户名和密码一样简单。在这种情况下,您将为FRIENDLYSITE1.COM提供一些凭据,并且每当它想要与APIHOST.COM建立连接时,它将在每个API请求中包含这些凭据(或者您的API支持创建可以用于后续API调用的cookie的登录)。


如果,另一方面,你真正的意思是你的问题是有网页托管的FRIENDLYSITE1.COM包含Javascript在他们和Javascript在这些网页想要访问APIHOST.COM,那么这是一个不同的情况。由于这种情况实际上是从用户计算机上的浏览器连接的(一个不安全的环境),因此使用像前面示例中那样的凭据将这些凭据暴露给任何人,因此它们不再是秘密的。

在这种情况下你能做的最好的是启用APIHOST.COM为CORS,只允许站点FRIENDLYSITE1.COM和FRIENDLYSITE2.COM为CORS访问。这将阻止任何其他网站的任何网页从浏览器访问APIHOST.COM,但它不会阻止任何服务器或任何服务器代理访问APIHOST.COM。基本上不可能允许从一个特定的网页访问,但不能从其他任何地方访问。这是因为网页是完全不安全的,所以你不能从网页上使用凭据,但要保密。

最新更新