验证 HTTP 请求的来源
Verifying Origin of HTTP Request
场景:
假设我有一个 RESTful http(s) API 运行ning 某处暴露在 public IP+端口上,现在我想制作一个简单的交互前端有了这个 API.
Constraint: 我想用GitHub页面来服务前端,我想做仓库public.
问题:有没有办法设计 API 使得只有来自 gh-pages 网站的调用才会成功?也就是说,如果有人要分叉存储库和 运行 他们自己的前端版本,API 是否会注意到调用不是来自 "official" gh-pages 站点?我真的很想知道我是否可以在 API 调用中提供一些东西来 证明 调用者是从某个预定的地方调用的。
如果前端可以私有托管,我可以在两台服务器上存储一个共享秘密并使用它来进行身份验证,但理想情况下我希望能够通过 GitHub 页面托管它(删除需要自己维护服务器)。我能否以某种方式利用 gh-pages 站点将获得来自 Github 的适当证书这一事实?或者这个证书是否同样适用于所有 gh-pages 站点,因此对确定来源没有用?
我希望问题很清楚,任何意见都将不胜感激!
请求来自 gh-pages
的假设是错误的。这些请求是从用户的 ip 浏览器发出的。任何用户都将从您自己的存储库或 fork 存储库加载浏览器中的网页内容,但是对 API 的请求将从用户的浏览器创建.
默认情况下,浏览器将不允许对 api 的请求与加载 html 的域不同。因此,从 https://pages.github.com/ and requesting your own private server will fail, as it will be on a different domain (see CORS), but there are many ways to avoid this (see Cross-Origin Resource Sharing on GitHub Pages).
加载内容
因此,只要 CORS 对您来说足够了(参见上文 link 如何启用对您的 api 的请求),您就不必担心。否则,你能做的不多,只能授权给客户。
Is there a way to design the API such that only calls originating from the gh-pages website will be successful?
没有
您拥有的唯一信息是客户选择告诉您的信息。
客户端可能发送引荐来源header。自定义客户端肯定可以撒谎。
场景: 假设我有一个 RESTful http(s) API 运行ning 某处暴露在 public IP+端口上,现在我想制作一个简单的交互前端有了这个 API.
Constraint: 我想用GitHub页面来服务前端,我想做仓库public.
问题:有没有办法设计 API 使得只有来自 gh-pages 网站的调用才会成功?也就是说,如果有人要分叉存储库和 运行 他们自己的前端版本,API 是否会注意到调用不是来自 "official" gh-pages 站点?我真的很想知道我是否可以在 API 调用中提供一些东西来 证明 调用者是从某个预定的地方调用的。
如果前端可以私有托管,我可以在两台服务器上存储一个共享秘密并使用它来进行身份验证,但理想情况下我希望能够通过 GitHub 页面托管它(删除需要自己维护服务器)。我能否以某种方式利用 gh-pages 站点将获得来自 Github 的适当证书这一事实?或者这个证书是否同样适用于所有 gh-pages 站点,因此对确定来源没有用?
我希望问题很清楚,任何意见都将不胜感激!
请求来自 gh-pages
的假设是错误的。这些请求是从用户的 ip 浏览器发出的。任何用户都将从您自己的存储库或 fork 存储库加载浏览器中的网页内容,但是对 API 的请求将从用户的浏览器创建.
默认情况下,浏览器将不允许对 api 的请求与加载 html 的域不同。因此,从 https://pages.github.com/ and requesting your own private server will fail, as it will be on a different domain (see CORS), but there are many ways to avoid this (see Cross-Origin Resource Sharing on GitHub Pages).
加载内容因此,只要 CORS 对您来说足够了(参见上文 link 如何启用对您的 api 的请求),您就不必担心。否则,你能做的不多,只能授权给客户。
Is there a way to design the API such that only calls originating from the gh-pages website will be successful?
没有
您拥有的唯一信息是客户选择告诉您的信息。
客户端可能发送引荐来源header。自定义客户端肯定可以撒谎。