- 背景,复习以前项目的时候,结合通义千问/kimi.ai,详细掰扯了一下单点登录,有了新的认识
- 单点登录的范围,肯定是同一台机器,或者同一类客户端,比如浏览器,或者专门的客户端软件,至于同一台机器上的不同客户端能不能其中一个登录了,其他的也自动登录,这个感觉要更复杂,要借助文件系统来搞.感觉一般讨论的单点登录是同一个机器上的同一个浏览器,并且浏览器支持localStorage,查了下,2010之后的浏览器就都支持了,基本没问题
- 单点登录的简单场景,这个场景是在a系统的页面点击b系统的url,这个很简单,从localStorage里取token,加到b系统url的header或url上就行了.
- 复杂场景,登录后,在浏览器新标签页直接访问b系统的页面url.前后端分离的场景,会先加载b系统的页面,然后页面里读localStorage里的token,但a,b系统的域名+端口是有不同的,所以不能共享localStorage,此时就用到了iframe+postMessage,在a系统url里,使用iframe把b系统的某个页面加载进来,但不显示,然后通过postMessage把token传给iframe,然后iframe的url是b系统的url,然后iframe里的代码收到token后写入自己域名+端口下的localStorage.此时b系统的localStorage里有了token,然后新标签打开b系统时,先加载页面,再ajax加载数据,ajax加载数据时,从localStorage获取token并带到header里,就可以了.
- 后端,一般单点登录或者带权限的系统,用jwt就可以了.用不用oauth2主要看有没有动态权限的需求.jwt的缺点就是一旦颁发,在其过期时间内,一直有效,如果后台修改了权限,没办法立即生效.所以动态权限不频繁的系统,或者说可以接受一些延迟动态权限生效的系统,就可以将token的有效时间设置小一点,然后前端等到token失效就取刷新token.而不接受权限延迟生效的系统,就只能上oauth2,每次请求都去认证中心去校验权限.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。