最正统的做法是单点登录,这个可以去看单点登录文档,这个是有很多成熟产品可以选择的。
如果条件不允许,上不了单点登录。就需要自己改造了。无论如何都要求双方系统要做改造适配。
比如 A 登录 B系统。假定A、B没有共用一套用户体系。下面这个是我们公司(其实就是我自己设计并实施的方案)的方案,比较复杂,主要是考虑到安全性:
- 登录A系统
- 在A中首次跳转B系统时,先在A系统中创建一个B系统的信任凭证申请记录(要有一个唯一标识,称之为凭证申请流水号applySn)
- 跳转到B系统的登录页面,并在url上追加信任凭证申请标记和A系统的基本信息(如A系统的名称、凭证申请流水号等)
- 在B系统的登录页面完成正常登录(输入B系统的用户名、密码,再完成人机校验)
- B系统在完成正常登录逻辑校验后,检测到”信任凭证申请标记“,于是再额外进行”跨系统信任凭证颁发“操作(这部分逻辑,是B系统需要改造添加的)
- B系统校验A系统的身份信息,比如A系统的名称、域名、密码等(这需要提前在B系统登记,可以对外颁发凭证的第三方系统信息)
- 如果第6步校验通过,则在B系统生成A系统的凭证(通常就是一个UUID串,并将该凭证与),并记录到数据库,然后将信息回传给A系统(这是服务器到服务器间的远程调用)
- A系统接收到B系统回传的凭证后,根据申请流水号,关联到相应的申请记录,并将凭证保存下来。注:该凭证需要与A系统当前登录的账号关联,即这个凭证只属于当前登录的这个用户
- 当A系统再次跳转B系统时,A系统根据之前接收的B系统信任凭证,调用B系统接口,获取一个临时免登录码(依然是服务器到服务器间的远程调用)
- B系统校验凭证无误后,生成一个临时的免登录码,该临时免登录码仅能使用一次,且只能在有限时间内使用(比如2分钟内),该免登录码需要关联凭证所关联的B系统中的用户信息,主要是用户名。
- A系统接到临时免登录码后,使用该免登录码跳转到B系统的一个免登录中转页面,url上需带上免登录码
- B系统校验免登录码,主要是校验该免登录码是否已经使用,以及是否过期。无误后,根据免登录码关联的用户名生成B系统里正常的Token信息,然后返回。此后,B系统的中间页面接收到Token后,便可以正常进入B系统了。