一个单点登陆的需求
A网站使用iframe嵌套B网站(跨域),B网站使用Oauth2.0单点登录,因为是iframe导致B网站cookie和session无法正常使用,造成提示登录失败等问题,求解如何正确处理呢?
所有登录逻辑都是B网站的,A只是用iframe嵌套了B网站,目的就是让浏览器URL一直保持是A网站。。
一个单点登陆的需求
A网站使用iframe嵌套B网站(跨域),B网站使用Oauth2.0单点登录,因为是iframe导致B网站cookie和session无法正常使用,造成提示登录失败等问题,求解如何正确处理呢?
所有登录逻辑都是B网站的,A只是用iframe嵌套了B网站,目的就是让浏览器URL一直保持是A网站。。
10 回答11k 阅读
6 回答2.9k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
首先需要 B 网站是你可控的,如果不是你可控的、又不支持
P3P
(the Platform for Privacy Preferences),那么只有后端加反向代理、让你 A/B 网站同域这一条路可解。不要相信百度上的什么 Set-Domain 之类的 JS 方法,很多浏览器都不支持。
一般来说,OAuth 的页面就是给人用 iframe 嵌入的(以防止样式冲突、JS 劫持之类的问题),它们都会带一个响应标头
P3P
。比较典型的是 QQ 的第三方登录,注意看响应头:你需要在 B 页面的 WebServer 中配置,使其也返回同样的响应标头,以达到让 iframe 跨域也能读写 Cookie 的目的。
有关
P3P
的更多介绍,可以参考 W3C 文档:https://www.w3.org/P3P/