iframe嵌入页面cookie和seesion的问题?

一个单点登陆的需求

A网站使用iframe嵌套B网站(跨域),B网站使用Oauth2.0单点登录,因为是iframe导致B网站cookie和session无法正常使用,造成提示登录失败等问题,求解如何正确处理呢?

所有登录逻辑都是B网站的,A只是用iframe嵌套了B网站,目的就是让浏览器URL一直保持是A网站。。

阅读 16k
3 个回答

首先需要 B 网站是你可控的,如果不是你可控的、又不支持 P3P(the Platform for Privacy Preferences),那么只有后端加反向代理、让你 A/B 网站同域这一条路可解。

不要相信百度上的什么 Set-Domain 之类的 JS 方法,很多浏览器都不支持。

一般来说,OAuth 的页面就是给人用 iframe 嵌入的(以防止样式冲突、JS 劫持之类的问题),它们都会带一个响应标头 P3P。比较典型的是 QQ 的第三方登录,注意看响应头:

clipboard.png

你需要在 B 页面的 WebServer 中配置,使其也返回同样的响应标头,以达到让 iframe 跨域也能读写 Cookie 的目的。

有关 P3P 的更多介绍,可以参考 W3C 文档:https://www.w3.org/P3P/

如果A只是个壳子的话,我觉得更好的办法是设置域名解析,然乎直接解析到B网站对应的服务器上。或者nginx直接代理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏