完整流程概述:
用户首先登录yach客户端,yach客户端就像是浏览器缓存一样获取到用户的信息并记录。
在yach里给用户推送消息链接 注释,用户点击链接后,会触发SSO接口,SSO接口会识别你这个用户的信息,是不是yach的人。
识别通过后,会把SSO接口请求的一些参数透传给你的回调地址如:localhost:8080/,他可能会给你如token=123456 id=10等等,这些都是SSO自动给你带上的,
但是事先你得先把你的回调地址设置好,识别你是yach用户后,你的回调地址上就变为了:http://localhost:8080?token=123456&id=10。
然后前端就在webpack打包入口文件中去写一个能获取到url中token id对应的值的方法。
通过取到token值,然后调后端的登录接口,并把你获取到的这个token(这个token就是证明是yach用户的信息,如工号)传递给后端。
后端呢也会拿着你这个token去跟SSO接口确认前端传来的这个token值是不是SSO给到前端设置的那个回调地址上带的那个,SSO确认通过后,就会告诉后端是的。
这时候前端刚才调后端的那个登录接口的成功返回结果会收到一个真正意义上的token
前端就需要把这个token保存起来(localStorage.setItem('token')),在axios的请求拦截器中去设置headers头,这个头的值就是和后端约定好的格式:如
config.headers['Authorization'] = 'xxx '+ localStorage.getItem('token')。
这样的话以后每次发送接口请求,就会自动携带上信息,用以证明你是谁,你有没权限。
注释补充:
有可能不是客户端内的消息推送,而是前端生成了一个二维码,这个二维码可以放置在任何对方,如别的PC端页面中
这样这个二维码的地址其实就是我们上面说的那个单点登录的回调地址。这样用户还需要用yach移动端打开扫一扫去扫这个二维码,还是相当于在客户端内去点了链接
因为用yach的移动端去扫码的时候,用户也是登录上了yach的状态了,跟在PC端一样,人家还是能捕捉到你的个人信息,只是端不一样。
这样就跟上面同理了,获取到用户信息,证明是你就会把参数透传给你的回调地址,前端就可以拿到url中的关键字。发送登录请求后端登录接口带上那个关键字。
后面的流程跟上面一模一样了。
当然了,如果用户不是yach或者没权限的,比如他用微信扫的,直接就被拒了。
或者没权限的人扫了,SSO那也不会往前端回调地址上拼参数,前端取不到参数的话,就可以提示用户不符合条件了。
整体逻辑就是这样。