假设api接口为api.a.com
在login.a.com完成了登录操作
实现在访问b.com和c.com时默然为登录状态
用户login后,后端会返回一个token标识用户
无论是cookie还是localStorage都是不能跨域访问的,如何在跨站是能拿到用户标识,保存用户状态呢?
类似淘宝登录后,访问天猫时已登录
求给一个解决思路
假设api接口为api.a.com
在login.a.com完成了登录操作
实现在访问b.com和c.com时默然为登录状态
用户login后,后端会返回一个token标识用户
无论是cookie还是localStorage都是不能跨域访问的,如何在跨站是能拿到用户标识,保存用户状态呢?
类似淘宝登录后,访问天猫时已登录
求给一个解决思路
访问b.com,用户需要登录跳转到login.a.com,验证登录成功信息cookie存在login.a.com下面,并将其当成url参数返回到b.com并存cooike到b.com,下次打开b.com就不需要跳转登陆了。
这时候访问c.com,又跳转login.a.com直接将cookie信息返回到c.com并存起来。
不是b.com, c.com默认为登录状态.
而是访问b.com, c.com时, 先跳转到login.a.com, 因为在a.com上已经登录, 所以直接跳转回b.com, c.com, 同时把登录信息带上.
说2个简单方法把:
1.类似ucenter的逻辑,按你举例,3个站,登录时候,调用每个站的一个页面,就ok了,解决了你的跨域
2.跨站链接加参数,比如你的a.com跳转b.com时候,链接为b.com?access_token=dskfakldjfi
前面几个人讲流程的基本正确:
访问b.com,b.com发现用户没登陆,跳转到a.com
a.com发现用户已经在a.com登陆,再跳转回b.com,将登陆信息带上
问题就是所谓的登陆信息是什么,这个肯定不是cookie,也不会是用户名密码什么的。
这个需要a.com和b.com相互约定传的是什么东西。
你可以参考CAS相关文档。
用户访问www.domain.com的时候,ajax异步(跨域)请求http://api.domain.com/check_l... 检查是否已经登录。至于解决跨域问题,可以通过jsonp或者api.domain.com服务器配置Access-Control-Allow-Origin 允许跨域请求。如果之前已经在api.domain.com登录过,那么浏览器会缓存登录信息,去请求URL的时候,会自动带上相关的cookie/session,该接口可以返回登录账户相关个人信息或者别的想要的信息;如果没有登录,则跳转到登录页面。
1.[b.com]
在发现未登录时跳转至[a.com]
进行登录
2.[a.com]
在登录完成后将登录authcookie
与用户信息记录到服务器(session_id或者redis都可以)
3.同时[a.com]
创建一个令牌token
关联上一步的authcookie
,并带回[b.com]
的backUrl中
4.[b.com]
拿到[a.com]
发回来的令牌去调用[a.com]
的接口查询是否令牌有效并且可以查到用户信息,有的话则拿回数据并做后续操作
以上是单点登录的基本流程,PS:单点登录与前后端分离没有关系。
13 回答13.1k 阅读
2 回答5.3k 阅读✓ 已解决
7 回答2.3k 阅读
4 回答1.8k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
早上看的。来自掘金