@
edis0n0 #5 这个就是 OAuth2 或者类似的过程。
这里面有两次重定向。
第一次重定向,访问 nextcloud.mycompany.work 发现没有登录,它给你重定向到 auth.mycompany.work 。重定向之后的过程就是本地浏览器根 auth.mycompany.work 的通信过程了,如果是标准的 OAuth2 , 每个来源网站的首次登录都会蹦出一个界面让用户同意授权,这里大概率会略去或者隐藏这个过程。
第二次重定向,当浏览器跟 auth.mycompany.work 完成认证授权过程之后,auth.mycompany.work 指示浏览器重定向回之前的 nextcloud.mycompany.work ,并附上 token 。然后,nextcloud.mycompany.work 再指示浏览器通过 LocalStorage 或者 Cookie 保存令牌。令牌保存之后,后面的过程就跟常规的令牌认证过程没区别了。
如果是标准的 OAuth2 且不使用简单模式,在两次重定向之间,会有一个授权代码换访问令牌的过程,不过单点登录过程可以不要这个步骤。
一退全退这个,光凭 OAuth2 就办不到了,上面有人说的“一个应用退出会通知其他已登录应用”的方案也不可行,因为令牌认证模式不是会话认证模式,服务器没法单方面登出。服务器需要借助一些其他手段,能够让令牌集中失效才行。