516 Star 3.2K Fork 1.5K

GVP许雪里 / xxl-sso

 / 详情

用户访问第二个client时的原理请教

待办的
创建于  
2021-12-14 12:00

原文档如下:
正常情况下,登录流程如下:
1、访问 "Client01应用地址" ,将会自动 redirect 到 "SSO认证中心地址" 登录界面
2、成功登录后,将会自动 redirect 返回到 "Client01应用地址",并切换为已登录状态
3、此时,访问 "Client02应用地址",不需登陆将会自动切换为已登录状态

对第三点始终没理解,用户在访问client02时,因为跨域的原因,又不能携带cookie中的sessionId,这个时候,认证服务端怎么知道是同一个用户已经通过访问client01登陆了呢。

评论 (3)

Kumilo 创建了任务

第三点 我看他在代码里是通过header里获取若是没有header我在这个方法里做了一个这样的处理。这里有个问题就是client01 和clien02只能在同一个浏览器里。

 public static XxlSsoUser loginCheck(HttpServletRequest request){
        String headerSessionId = request.getHeader(Conf.SSO_SESSIONID);
        if (headerSessionId == null ) {
            Cookie[] cookies = request.getCookies();
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(Conf.SSO_SESSIONID)) {
                    headerSessionId = cookie.getValue();
                }
            }
        }
        return loginCheck(headerSessionId);
    }

这个应该是 A-client B-client C-认证服务器
登录A后,C将cookie留在C域名下;登录B时,重定向到C域名进行登录时,会自动携带当前域名下所有cookie,C向B返回session用户信息

访问client2时会重定向到认证中心,浏览器就带上认证中心域的cookie,认证中心所以就知道是登录过的,然后再重定向到刚刚请求client2应用的资源同时附上一个xxl_sessionid,这个就是全局session,client2应用拿到这个全局session就去redis上验证,验证通过就认为是已经登录过的,就直接放行,不需要再到登录页输入账户和密码。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(4)
4984814 sltzwfy 1578978028
Java
1
https://gitee.com/xuxueli0323/xxl-sso.git
git@gitee.com:xuxueli0323/xxl-sso.git
xuxueli0323
xxl-sso
xxl-sso

搜索帮助