javascript – OAuth 2.0是保护Web服务访问权限的正确工具吗?

我打算创建两个项目.

一个项目将是一个简单的以HTML / Javascript为中心的项目,它使用AJAX从Web服务中检索和轮询数据.我们称之为项目A.

另一个项目B项是一个RESTFul Web服务,它只是从外部源缓存数据检索.

基本上,Project B将作为一个以上项目的Web服务.我不会向公众展示项目B.我刚刚将项目A用作将从项目B进行轮询的示例项目.

我读过OAuth 2.0,它似乎是防止任何其他应用程序访问我的Web服务的最佳和最直接的方法.但这里有一些问题:

>由于项目A和项目B将分为两个独立的域. AJAX会在这种情况下工作吗?因为我已经读过,如果我打算从另一个域中检索数据,我必须使用JSONP. JSONP有多安全?
>假设我实现了OAuth,我将如何管理我的安全密钥以进行令牌加密/解密?最初,我在想的是项目A是一个简单的Java项目,它基本上可以存储密钥并从我的Web服务中进行轮询.这样,问题#1就可以解决了,因为我可以简单地使用一个简单的AJAX函数.但是,我觉得制作一个Java Web项目只是为了存储密钥并从Web服务中轮询信息是非常必要的.我关注的是,如果我不把它作为一个Java项目,我不知道在哪里存储我的密钥.当然,我不会在JS代码中存储/公开它.

这让我想问,OAuth 2.0是正确的方法吗?或者还有其他更简单的选择吗?

最佳答案 与此处所说的相反:

我相信OAuth 2.0不是要走的路.

为什么?

OAuth 2.0是授权协议,而不是身份验证协议.
它依赖于第三方提供身份验证.
如果您想重新授权服务使用,第三方还会存储谁有权访问哪些资源.
因此,单凭OAuth 2.0永远无法解决任何身份验证问题.
如果您希望您的应用程序(在oauth的术语:资源服务器中)独立于提供OAuth(授权服务器)的其他第三方,您必须自己实现授权服务器.
您将拥有有限数量的资源服务器,而OAuth实际上是为了授权跨多个提供商的服务访问.
因此,我不知道OAuth如何解决您的问题.

JSONP是否安全实际上是一个有趣的问题.

实际上JSONP是什么?
这是javascript在您的DOM中添加脚本标记,并使浏览器加载该额外资源.
它是否安全基本上与要求浏览器和服务器之间的任何通信的安全性是相同的问题.
它会像你做的那样安全.
具有Access-Control-Allow-Origin等的AJAX也是如此.

那么该怎么办?

首先是一件事.
如果您的应用程序A只是静态资源,则您不需要应用程序,则需要内容交付网络.
这就是stackoverflow如何做到这一点,这就是它如何胜过你自己可以托管的任何服务器.
有这个,并有像谷歌的pagespeed缓存代理(我不知道该产品是否仍然存在,但它只是作为一个例子).

以下是另外两个想法:

如果您希望两个应用程序之间的通信安全,则可以使用非对称加密.
交换公钥,您可以验证身份并安全地传输数据.
我会留给你深入研究此事.

同样,史蒂夫E.写道,但没有正确命名,你可以使用CSRF代币.
我相信jQuery现在已经支持了一段时间,但是如果没有jQuery,这种技术同样适用.
再一次,这是我要让你深入研究的问题.

最后

所有这些让我想到重新发明轮子.
只要你的连接是安全的,你就可以做任何事情(包括带有reaaaaaally long字符串的纯文本身份验证),只要你有点偏执并在你的身份验证机制中加入一些熵.
那么,它有多安全?这是一个大多数时候都回答“绝对安全”的问题,但实际上很少是真正的要求.

点赞