如何确保只有我的 javascript 客户端 Web 应用程序向 REST API 发出请求?
Posted
技术标签:
【中文标题】如何确保只有我的 javascript 客户端 Web 应用程序向 REST API 发出请求?【英文标题】:How to make sure that only my javascript client web app is making requests to REST API? 【发布时间】:2015-02-24 03:54:44 【问题描述】:我正在构建一个 Web 应用程序。它基本上是一个博客。
有一个 javascript 客户端 Web 应用程序和一个实现 REST API 的服务器。
当用户访问我的博客时,我使用 javascript 函数 loadPosts()
使用 Ajax 将 GET 请求发送到服务器上的 myblog.com/api/posts
端点。服务器返回包含博客文章的 JSON 数组,客户端的 javascript 解析 JSON 并附加 html 以显示博客文章。
我遇到的问题是我觉得我的 REST API 不安全。
请记住,我不希望网站访问者必须登录才能查看博客文章。然而,似乎任何人都可以在他们的浏览器中输入myblog.com/api/posts
并从我的服务器获取包含所有博客文章的 JSON 响应。 这意味着其他人只需调用我的 REST API 就可以创建重复的博客并使用我在服务器上的数据!
因此我的问题是如何确保只有我的 javascript 客户端能够调用我的服务器并从我的 REST API 获取数据?请注意,我不希望我的博客访问者授权才能查看博客文章。
提前致谢!
【问题讨论】:
这个答案对你有帮助我认为***.com/a/13458888/1982426 关于用户必须登录的讨论。 除非您对他们进行身份验证,否则您无法像浏览器一样阻止某人发出 HTTP 请求。即便如此,他们仍然可以窃取您的数据。 【参考方案1】:您可以使用以下方法。
-
从 loadPosts() 方法传入客户端令牌。您可以使用 AES 或其他一些加密技术来加密令牌。
解密令牌以验证请求仅来自您的方法。
响应请求
由于您的 loadPosts() 是客户端 javascript 方法,因此即使这种方法也可能被黑客入侵。任何人都可以从他们那里得到你的令牌。
如果您想要更高的安全性,您可以在每次发出新请求时生成新令牌,并将相关信息(如 IP 地址或其他信息)存储在数据库中。然后您可以在 api 请求中验证该信息并做出相应的响应。
这完全取决于你想走多远。
希望对你有帮助
【讨论】:
以上是关于如何确保只有我的 javascript 客户端 Web 应用程序向 REST API 发出请求?的主要内容,如果未能解决你的问题,请参考以下文章
如何确保我的 django 应用程序中只有 1 个模型创建迁移?