网站A是否可以根据网站P Cookie进行不同的渲染?

时间:2019-11-21 06:58:42

标签: javascript cookies cors cross-domain

我在构建应用程序时遇到了麻烦,请多多关注我。我可能缺少明显的东西。

理想情况下,它的工作方式如下:用户首先登录到Web服务服务器 P ,他们是该服务器的付费成员。通过某种方式,现在每当同一用户访问合作伙伴站点(例如 A )时,由于该用户是服务 P 的付费成员,因此对该用户的呈现方式有所不同。特别是,如果客户端是站点 P 的成员,则 A 将向用户显示原本隐藏的资源。 某些级的资源显示给不是站点 P 成员的客户。

enter image description here

以下是一些对该问题很重要的要求:

  • 网站 A 的安全性虽然有些重要,但并不十分重要。它不是银行网站,也不是任何网站,实际上, A 网站实际上不需要了解有关用户/客户端的任何信息,只要他们是 P 成员。
  • 合作伙伴网站 A (以及B,C,D等)是具有网站 P 的业务合作伙伴,并且能够进行合理的基础架构更改以支持此想法去工作。当然,合作伙伴网站所需的修改越少越好。
  • 必须与尽可能多的新旧浏览器一起使用。需要使用对Cookie尤其严格的Safari。
  • 理想情况下,即使用户禁用了第三方Cookie(我们可以稍加调整,但理想情况下无论哪种方式都可以),此方法仍然有效。
  • 实际上,Cookie甚至不是一个严格的要求...如果有一种方法可以使localStorage适用于该解决方案(例如,将用户是站点 P的事实存储在客户端上成员)或其他某种方式(例如在url中传递信息)也可以。
  • 理想的站点 A 在呈现页面之前知道客户的 P 成员身份(即重新呈现不理想)。
  • 出于用户体验的原因,我们不能使用重定向。特别是,由于允许合作伙伴网站的访客用户在那里查看一些资源,因此我们不希望将这些用户重定向到网站 P (如SSO解决方案),因为他们可能并没有首先向 P 会员付费。

以下是我尝试过的一些事情:

  1. 用户登录到站点 P 。用户单击一个按钮,即可通过在网址中正确传递令牌,从而通过iframe有效地将已签名的令牌字符串发送给合作伙伴网站。本质上,是在位于 网站 P 但指向 A / token_login / token = asdjsalkfsadasdfdsf的iframe中的GET请求。为了使该站点 A 发送回去,我必须禁用X帧标题。这是安全的,因为站点 A 仅发送JSON响应(不容易受到点击劫持)。但是,当站点 A 将cookie发送回站点 P 时,它实际上并不起作用,并且由于同源政策,浏览器未设置它们。
  2. 用户登录到站点 P 。用户单击按钮,然后Javascript代码启动AJAX请求(不再是iframe)。同样,AJAX请求是一个GET请求,我将令牌字符串放入url中。类似地,站点 A 正在登录用户(并返回“成功” JSON响应-我已将响应Access-Control标头设置为启用此功能),并将cookie及其响应发送回。但是,如果用户随后直接访问站点 A ,站点 A 仍然无法识别它们,因为以前出于相同来源的政策未设置Cookie。

我不确定下一步该怎么做,希望有人可以尝试一些高级的想法。现在似乎很明显,如果#1不起作用,那么#2也不会。我想我正在解决这个问题,因此需要重新审视。

其他想法:

  • 可以用postMessage做什么吗?已经看到了这个想法在SO上突然出现,但是还没有使用过,也无法想象该架构会起作用。
  • JSONP吗?
  • 在站点 P 上是否直接嵌入了在站点 A 上托管的某种Javascript?这能解决问题吗?
  • 使用1像素gif的技巧?可以肯定的是,尽管它不会设置任何cookie(如果我甚至需要cookie来执行此操作),但这仍然将是GET请求。再说一次,由于现在很多人/浏览器都禁用了第三方Cookie,所以我真的不想依赖它。
  • CORS?我已经在上面的#2尝试中使用了CORS,甚至获得了网站 A 来发送Cookie。我是否需要打开一个选项,告诉浏览器站点 A 和站点 P 相互信任,从而保存站点 A 的饼干?本质上告诉浏览器,由于站点 P 在站点 A 的白名单中,跨域cookie可以吗?
  • 还有其他事情吗?

我该怎么做?感谢您提出的所有想法。

0 个答案:

没有答案