2012-12-08 43 views
1

我正在建立一个营销服务,在这里我们为各公司提供小部件,以便在其网站上托管它。这些小部件应该直接从浏览器使用javascript获取和发布信息,以便在服务器中休息AP。最终用户可能需要也可能不需要授权,具体取决于他们访问的数据类型。我们需要使用流行的社交网络(如facebook,twitter等)对最终用户进行身份验证。实际上,我们的服务器端api需要验证两件事1.通话来自相应公司的网站2.通话由适当的终端进行用户。使用oAuth验证JavaScript小部件

我不确定我要在这里使用什么样的身份验证。我认为,我不能使用oauth(1.0,2.0),因为它需要消费者密钥和秘密,它们不能安全地存储在JavaScript中。有没有可以使用的任何修改的oauth流?有人已经解决了这个问题。如果我有人在服务器端有一个基于弹簧的解决方案将是更可取的。

+0

我们做了同样的事情,与用户的实际身份验证方法无关;请参阅[REST身份验证和公开API密钥] (http://stackoverflow.com/questions/5472668/rest-authentication-and-exposing-the-api-key/13891103#13891103)。如果用户未通过身份验证,该解决方案不是100%安全的, h所有请求都可能被服务器端脚本伪造。但公共数据无论如何都可能从各自公司的网站上被刮掉。 (当然,虽然提供API的刮板使得他们的生活更容易...) – Arjan

+0

*“最终用户可能需要或可能不需要授权”* - 授权或认证? – Arjan

回答

1

您无法验证来电是否来自相应公司的网站。该呼叫将来自最终用户浏览器,而不是网站。

此外,还有可以从浏览器到你的网站没有直接调用(至少不使用XMLHTTPRequest,因为你的小部件和服务器不在同一个域。您可以通过使用JSONP解决这个问题。

您可以使用OAuth2和隐式授权流程:http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-4.2

+0

可以通过设置使用'if(document.domain =='expected-domain.com)''的JavaScript文件来设置令牌,以确保域是正确的,*如果*可以确定它确实是一个浏览器来获取JavaScript,并且如果JavaScript无法使用XHR/Ajax获取(因此不支持CORS或JSONP,*为JavaScript *)。但是,确保它是一个浏览器可能需要访问者从API服务器获取一些cookie,例如* always *需要用户身份验证,这在OP的情况下是不可行的。你知道OAuth2的隐含授权是否适用于匿名访问者? – Arjan

+0

啊,再次阅读问题,*可能*用户总是被认证,但并不总是授权使用某些特定的网站。看起来,OAuth隐式授权的工作方式相反:该网站需要由用户授权。或者,也许是关于某些行为的授权,而不是某些网站。如果用户可以使用任何已知的网站,那么博客文章[OAuth和客户端小部件](http://supercollider.dk/2009/01/oauth-and-client-side-widgets-154)可能有助于确保使用已知的网站。 – Arjan