您好,感谢您的光临。
我正在设计一个应用程序,它将通过API托管第三方网站的某些信息/数据,并且必须通过经过身份验证的请求进行访问。
OAuth是解决这个问题的方法吗?还是有更好的东西?我不会预先知道第三方网站的域名,所以我不能依赖主机头(无论如何都可以欺骗)。
对API的请求很可能源自客户端的jQuery或常规JavaScript。
确保从我的API请求数据的第三方网站是他们所说的人,并且被允许访问他们请求的信息的最佳方法是什么?
非常感谢!
马特
答案 0 :(得分:1)
OAuth,特别是OAuth 2(尚未最终确定),可能对您有用。但由于Web请求来自浏览器而不是托管这些网站的Web服务器,因此每个浏览器都必须经过授权而不是每个域。
让我们退一步问这个问题:
您的API将根据每个用户或每个网站域的唯一身份公开唯一的数据吗?或者换句话说,您是API所有者是否要通过合同授权域来访问您的数据,还是个别用户可以通过您的API访问数据,这些用户需要授权这些其他域访问他们自己的服务数据?
如果您正在授权域(而不是用户),则浏览器根本无法成为这些授权API请求的发起者。这是因为这些域上的Web服务器必须向客户端发出其密钥,此时他们已经失去对它的控制权,任何人都可以进行这些授权调用 - 而不仅仅是您要授权的域。这就是“你不能信任客户”的安全原则。
如果您正在授权用户,那么访问其中一个第三方网站的每个用户都必须经过一次性设置,其中网站将其浏览器重定向到您的服务以登录并说“是,[第三方网站]可以访问我的数据“,之后他们会被重定向回该网站。之后,只要他们访问该网站,该网站就可以下载该用户独有的密钥,并可以通过客户端上的javascript使用这些密钥进行授权的API调用。