场景:假设我有一个公开在公共IP+port上的RESTful http(s) API,现在我想做一个简单的前端,它与这个API交互。
Constraint:我希望使用GitHub页面来服务前端,并且我希望将存储库公开。
问题:是否有一种方法来设计API,以便只有来自gh页面网站的调用才能成功?也就是说,如果有人要分叉存储库并运行他们自己版本的前端,API会注意到调用不是来自“官方”gh页面站点吗?我真的很想知道,在API调用中是否有什么可以证明调用方是从某个特定的、预定的位置调用的。
如果前端可以私下托管,我可以在这两台服务器上存储一个共享秘密,并使用它进行身份验证,但理想情况下,我希望能够通过GitHub页面承载这个秘密(无需维护自己的服务器)。我能不能利用这个事实,h页的网站将有一个适当的证书,从吉突布?或者该证书是否同样适用于所有gh页站点,因此对确定来源没有帮助?
我希望问题是明确的,任何投入都会非常感谢!
发布于 2019-04-12 15:12:28
是否有一种方法来设计API,以便只有来自gh页面网站的调用才能成功?
不是的。
你所掌握的唯一信息是客户选择告诉你什么。
客户端可能会发送一个引用标头。一个定制的客户肯定会对此撒谎。
发布于 2019-04-12 14:29:34
假设请求来自gh-pages是错误的。请求是从用户的ip浏览器发出的。任何用户都将从自己的存储库或叉存储库加载浏览器中的网页内容,但是对API的请求将从用户的浏览器中创建。
默认情况下,浏览器将不允许在与加载html的域不同的域中请求api。因此,从https://pages.github.com/加载内容并请求您自己的私有服务器将失败,因为它将位于不同的域(请参阅CORS),但是有许多方法可以避免这种情况(参见GitHub页面上的跨源资源共享)。
因此,只要CORS对您来说就足够了(请参阅上面的链接如何启用对api的请求),您就不必担心了。否则,你能做的不多,只能授权客户。
https://stackoverflow.com/questions/55635946
复制相似问题