json - 简单、安全的 API 认证系统

我有一个简单的 REST JSON API 供其他网站/应用程序访问我网站的某些数据库(通过 PHP 网关)。基本上该服务的工作方式如下:调用 example.com/fruit/orange,服务器返回有关橙子的 JSON 信息。问题是:我只希望我允许访问此服务的网站。使用简单的 API key 系统,任何网站都可以通过从授权网站的(可能的)客户端代码中复制 key 来快速获取 key 。我看过 OAuth,但我正在做的事情似乎有点复杂。解决方案?

最佳答案

您应该使用 OAuth。

实际上有两种 OAuth 规范,3-legged 版本和 2-legged 版本。三足版本是最受关注的版本,不是你想使用的版本。

好消息是 2-legged 版本完全符合您的要求,它允许应用程序通过共享 key 授予对另一个应用程序的访问权限(非常类似于 Amazon 的 Web 服务模型,您将使用 HMAC-SHA1签名方法)或通过公钥/私钥系统(使用签名方法:RSA-SHA1)。坏消息是,它还没有像 3-legged 版本那样得到很好的支持,所以你现在可能需要做更多的工作。

基本上,2-legged OAuth 只是指定一种“签名”(计算哈希)几个字段的方法,这些字段包括当前日期、一个称为“nonce”的随机数以及您的请求参数。这使得模拟对您的 Web 服务的请求非常困难

OAuth 正在缓慢但肯定会成为此类事物的公认标准 - 如果您接受它,从长远来看,您会得到最好的结果,因为人们可以利用各种可用的库来执行此操作。

它比您最初想了解的要复杂得多 - 但好消息是很多人在它上面花费了很多时间,所以您知道您没有忘记任何东西。一个很好的例子是,最近 Twitter 发现了社区目前正在努力弥补的 OAuth 安全漏洞。如果您发明了自己的系统,那么您必须自己解决所有这些问题。

祝你好运!

克里斯

https://stackoverflow.com/questions/846752/

相关文章:

JSON Schema - 根据另一个字段的值指定字段

c# - 使用 JSON.NET 序列化/反序列化对象字典

ruby-on-rails - 销毁记录时应该渲染什么?

json - 在 node package.json 中,使用额外参数从另一个脚本调用脚本,在这种情

asp.net-mvc - MVC ajax json 发布到 Controller 操作方法

json - Play Framework - 向 JSON 对象添加字段

json - 使用 jq 从 JSON 输出中提取特定字段

json - 应该如何为 RESTful JSON 集合实现 HATEOAS 样式的链接?

jquery - 使用 jQuery grep() 过滤 JSON 数组

c# - ASP.NET Core - 当前上下文中不存在名称 'JsonRequestBehavi