联合登陆设计

一、支持第三方登陆

以使用微信登陆为例,A应用的登陆界面下,有一个微信登陆图标,当用户点击微信图标时,其实就是点击一个链接,这个链接会打开微信的授权页面,需要注意的是,能打开这个页面,说明是登录了微信的。当用户点击同意后,会调用微信后台一个接口(已经登录能够通过认证),微信后台根据连接上配置的重定向地址,重定向到A应用的一个页面,并且带上一个一次性code,A应用前端用这个code调用A应用后台,A应用后台用code+appId+secret调用微信后端接口获取一个一段时间有效的token,就可以访问微信的用户接口,拿到一定的用户信息,A应用就可以处理自己的登陆流程了。

以使用github为例,当用户点击github登陆图标时,其实是一个链接,跳转到github登陆页,用户登陆成功后,github会询问用户是否要授权登陆A应用登陆,用户点击确认后,调用了github的一个接口,重定向到指定的A应用重定向地址并带上一个code,A应用前端用code调用A应用后端一个解扣子,A应用后端用code+client_id+client_secret调用github一个接口,获取token,然后用token调用github接口,获取用户信息,完成A自己的登陆流程。

二、总结

这种联合登录的思想就是必须在一个已经登录的系统E上调用E后端接口,此时调用是经过认证的,安全的,然后得到一个code,然后拿code调用需要联合登录的系统N的一个接口,此时N提供的这个接口是无需认证,但是N的后端逻辑是用code调用E的后端接口获取token,此时交互是安全的,就这样完成了的联合登录,所以核心是必须有一方的系统是经过认证的。

联合登陆设计_第1张图片

 

你可能感兴趣的:(架构,架构)