我的foo.com
网站上有PageA
。
PageA
里面有一些JQuery,它通过XmlHttpRequest请求驻留在bar.com
的CouchDb实例的一些JSON数据。
据我所知,相同的原始策略阻止了这一点,但JSONP的使用应该绕过这个限制(我相信CORS最终会覆盖这个用例。)
foo.com
后面的服务器与bar.com
的数据库建立了可信连接。
是否可以让用户使用其OAuth凭据(例如Twitter登录)对foo.com
进行身份验证,然后进行身份验证以使用bar.com
? (我认为不是由于认证cookie只能被foo.com
读取。)
鉴于此,是否有任何方式我可以使用CouchDB的任何可用身份验证机制验证用户在bar.com
foo.com
使用CouchDB(OAuth, cookie和Basic)?
编辑:我可以从bar.com
(通过其可信链接检索)返回foo.com
的用户凭据,然后在XmlHttpRequest中设置客户端使用bar.com
进行基本身份验证的HTTP标头。当然,所有这些都是通过TLS完成的(......或者这是一场安全噩梦?)
答案 0 :(得分:3)
从我的POV来看,即使是JSONP也存在安全风险 - 所以我不会走那条路......
要实现您的要求,我会看到两个选项(如果需要,两者都可以使用SSL):
编写自定义webservice / REST / SOAP /在foo.com
上运行的任何内容,并代表您与bar.com
进行身份验证的客户端交互
使用在foo.com
上运行的“通用http代理”,并以您的应用/网页的工作方式映射bar.com
,就像CouchDB在bar.com
上运行一样经过身份验证的客户
答案 1 :(得分:2)
我在xhr中对同一起源政策有同样的问题。我有一个网站,我想用来自运行CouchDB的不同服务器的JSON数据填充自动完成内容。
有两种方式:
至于从CouchDB和另一个应用服务器共享登录会话,我不知道如何在不诉诸基本HTTP身份验证的情况下做到这一点,而这种身份验证并不是那么安全。让app server充当中间人b / t客户端和CouchDB可能更好。
应用服务器中间人的另一个好处是,单个CouchDB数据库可以为多个用户提供文档。相反,如果客户端直接访问CouchDB,您可能需要通过过滤复制为每个用户创建一个单独的数据库,以便一个用户无法查看其他用户的文档。
答案 2 :(得分:0)
您可以从facebook身份验证服务器流程中获取灵感,将客户端替换为您的客户端,将服务器替换为foo.com,将facebook替换为bar.com。看看http://developers.facebook.com/docs/authentication。这样客户端应该经过身份验证才能使用来自bar.com的数据(当然,从bar.com加载的脚本中,你可以将数据传递给foo.com回调,除非我弄错了。)
答案 3 :(得分:0)
据我所知,您希望使用foo.com的JSONP在bar.com上发出请求,同时希望bar.com能够知道此请求是否已经过foo.com验证。
这就像登录foo.com并允许将真实性转移到bar.com。
假设XMLHttpRequest可以记住其余请求的cookie中的会话ID,那么如何使用一次性密码(实际上是一个随机字符串,我们可以称之为令牌)来调用bar.com来自foo.com生成的页面,登录后如下所示:
login request -> foo.com -> XHR(bar.com, OTP) -> bar.com
cookie updated with an active session id <- bar.com
XHR(bar.com, CounchDB) -> bar.com successfully
因此,如果foo.com和bar.com可以私下(并且安全地!)进行通信,foo.com可以生成OTP并将其传递给bar.com,以便bar.com知道只有有效用户才能知道它并且因此可以将会话ID视为已通过身份验证。
替代课程: