有没有通过leanCloud实现单点登录的demo?
主要是想了解不同域名之间如何共享登录状态。
我能想到的方法是在主应用里自己手动做oauth provider,然后子应用通过标准第三方接入来做单点登陆。
我知道不同应用之间可以共享User,以实现共享用户。可是web端无法实现,因为不同应用不同域名,无法共享状态,也无法跳转。总不能每个应用一个登陆,那样的话,用户在应用A登陆,然后去应用B,相同账户还要登录一遍。
有没有什么更好的方法实现?leanCloud官方有没有计划推出这方面的实现?
这是一个好问题,非常感谢反馈。
AV.User 是一个比较通用的账号体系,能够比较快速实现账号系统。不过确实不支持 SSO(单点登录),但是 LeanCloud 是灵活的。建议可以将鉴权自己来做,在 LeanEngine(云代码)中通过生成 token 来鉴权,然后在 LeanEngine 中去调用 AV.User 这个账号体系即可。
这样相当于 SSO 部分,你们自己搞了,账号系统逻辑通过 LeanEngine 中使用 AV.User 。
用户在应用A登录后,获取sessionToken,然后将sessionToken传到应用B,在应用B里面可以通过AV.User.become(sessionToken, options) 来登录,是这样一个流程吗。
become 是一个比较通用的通过传入 token 登录的方式,与单点登录关系不大。单点登录需要能够踢掉其他已登录的设备,这个可以通过 LeanEngine 中移除掉旧的 token 之类的办法实现。
在LeanEngine中如何移除旧的token,用AV.User.become(sessionToken, options),并不能移除旧的token
我的意思是,将这个 token 自己在数据表中存储一下。相当于某个用户此时某个 token 是有权限的需要自己记录一下。SDK 目前没有单点登录的功能。
如:A 用户当前起效的 token 是 aaaaa,当他通过没有 token 的地方登录并且通过了校验之后,给他 set 一个新的 token,同时修改数据表中对应的 token,比如更改为 bbbbb,那么 aaaa 这个 token 就失效了,从而实现单点登录。
我的理解是这样的。目前SDK是支持多个设备同时登录的。如:IOS客户端用户名和密码登录得到sessionToken和Android客户端用户名和密码登录得到sessionToken都是一样的,而且两个客户端都可以操作。现在,在用户表_User再加入一个token字段,客户端用用户名和密码登录或者是用sessionToken登录,都会重新生成一个token,返回给客户端。然后客户端每次操作都把客户端token和服务器的token对比,如果相同则操作。这样,用户在IOS端登录后拿到token,然后再在Anroid端登录又拿到token,这时IOS端token就失效了。
对的,就是需要重新生成一个 token,保证 token 的唯一性,就是单点登录了。
那不是所有api请求都得先用重新生成token来验证,自己写云函数啊。