Zuul用户认证流程详解:从客户端到资源服务的令牌验证

需积分: 0 0 下载量 27 浏览量 更新于2024-07-01 收藏 1.17MB PDF 举报
"本次学习内容主要涉及Zuul v1.21的用户认证流程,讲解了从客户端请求认证到资源服务校验JWT令牌的全过程,同时提到了认证服务与用户中心数据库的交互以及相关环境的搭建和接口设计。" 在用户认证过程中,Zuul作为边缘服务扮演着关键角色,它维护了整个系统的安全访问控制。以下是详细的用户认证流程: 1. **客户端发起认证请求**:客户端(通常是Web应用)首先向认证服务发送一个认证请求,携带必要的身份信息,如用户名和密码。 2. **认证服务处理请求**:认证服务接收到请求后,会查询用户中心服务来验证用户的账号和密码。在验证通过后,认证服务会向Spring Security申请一个令牌,并将这个身份令牌(token)存储在Redis缓存系统中,以备后续验证使用。同时,认证服务会在客户端的浏览器cookie中写入这个token。 3. **前端获取JWT令牌**:前端应用在成功认证后,会携带cookie中的token向认证服务请求JWT(JSON Web Token)令牌。JWT令牌包含了用户信息和权限,可以用于后续的服务间通信验证。前端会将JWT令牌存储在sessionStorage中,并解析出用户信息展示在页面上。 4. **前端访问资源服务**:当前端需要访问资源服务时,它会携带两个令牌:一个是cookie中的身份令牌,另一个是HTTP Header中的JWT令牌。这两个令牌对于确保请求的合法性至关重要。 5. **Zuul网关验证token**:在前端发出的每个请求到达资源服务之前,Zuul网关会首先检查请求中携带的两个token。它会验证cookie中的token是否有效且未过期,如果发现token无效,会要求用户重新登录。 6. **资源服务校验JWT并授权**:当请求到达资源服务,资源服务会进一步校验JWT令牌的合法性。如果JWT有效,资源服务会基于JWT中的权限信息决定是否允许访问请求的方法。如果用户没有相应权限,资源服务会拒绝请求。 在这个过程中,认证服务并不直接连接数据库,而是通过用户中心服务来获取用户信息。为了实现这一功能,我们需要: - **创建用户中心数据库**:设置一个名为xc_user的MySQL数据库,并导入相应的SQL脚本。 - **构建用户中心工程**:导入提供的xc-service-ucenter.zip文件,用于用户信息管理、角色管理和权限管理。 - **设计查询用户接口**:用户中心提供API接口,用于根据账号查询用户信息和权限。 这个过程涉及了分布式系统中的身份验证、授权以及服务间的通信安全,通过Zuul、Spring Security、JWT和Redis等技术工具,实现了高效且安全的用户认证流程。