企业网站推广哪家公司好深圳网站开发antnw

张小明 2026/1/9 4:23:27
企业网站推广哪家公司好,深圳网站开发antnw,网站的建设方式,网站建设 重庆最近发现有些小伙伴#xff0c;对Token、Session、Cookie、JWT、OAuth2这些概念非常容易搞混。有些小伙伴在工作中可能会遇到过这样的困惑#xff1a;做登录功能时#xff0c;到底该用Session还是JWT#xff1f;OAuth2和Token是什么关系#xff1f;为什么有的方案要把Toke…最近发现有些小伙伴对Token、Session、Cookie、JWT、OAuth2这些概念非常容易搞混。有些小伙伴在工作中可能会遇到过这样的困惑做登录功能时到底该用Session还是JWTOAuth2和Token是什么关系为什么有的方案要把Token存在Cookie里今天这篇文章专门跟大家一起聊聊这个话题希望对你会有所帮助。一、从餐厅就餐模型开始讲为了让大家更好理解我先用一个餐厅就餐的比喻来解释这些概念image现在让我们深入每个概念的技术细节。二、CookieHTTP的世界身份证2.1 什么是CookieCookie是存储在浏览器端的一小段文本数据由服务器通过HTTP响应头的Set-Cookie字段发送给浏览器浏览器随后会自动在每次请求中通过Cookie头将其带回给服务器。工作原理image2.2 Cookie实战代码// 服务器设置CookiePostMapping(/login)public ResponseEntity login(RequestBody User user, HttpServletResponse response) {if (authService.authenticate(user)) {Cookie cookie new Cookie(session_id, generateSessionId());cookie.setMaxAge(3600); // 1小时有效期cookie.setHttpOnly(true); // 防止XSS攻击cookie.setSecure(true); // 仅HTTPS传输cookie.setPath(/); // 对整个站点有效response.addCookie(cookie);return ResponseEntity.ok().build();}return ResponseEntity.status(401).build();}// 读取CookieGetMapping(/profile)public ResponseEntity getProfile(CookieValue(session_id) String sessionId) {User user sessionService.getUserBySession(sessionId);return ResponseEntity.ok(user);}2.3 Cookie的重要属性属性 作用 安全建议HttpOnly 防止JavaScript访问 必须设置为true防XSSSecure 仅通过HTTPS传输 生产环境必须设置为trueSameSite 控制跨站请求时是否发送Cookie 建议设置为Strict或LaxMax-Age 设置Cookie有效期 根据业务安全性要求设置三、Session服务端的用户档案3.1 什么是SessionSession是存储在服务器端的用户状态信息。服务器为每个用户创建一个唯一的Session ID并通过Cookie将这个ID传递给浏览器浏览器后续请求时带上这个ID服务器就能识别用户身份。Session存储结构// 典型的Session数据结构public class UserSession {private String sessionId;private String userId;private String username;private Date loginTime;private Date lastAccessTime;private MapString, Object attributes; // 自定义属性// 省略getter/setter}3.2 Session实战代码// 基于Spring Session的实现PostMapping(/login)public String login(RequestParam String username,RequestParam String password,HttpSession session) {User user userService.authenticate(username, password);if (user ! null) {// 将用户信息存入Sessionsession.setAttribute(currentUser, user);session.setAttribute(loginTime, new Date());return redirect:/dashboard;}return login?errortrue;}GetMapping(/dashboard)public String dashboard(HttpSession session) {// 从Session获取用户信息User user (User) session.getAttribute(currentUser);if (user null) {return redirect:/login;}return dashboard;}3.3 Session的存储方案1. 内存存储默认# application.ymlserver:servlet:session:timeout: 1800 # 30分钟过期时间2. Redis分布式存储ConfigurationEnableRedisHttpSession // 启用Redis Session存储public class SessionConfig {Beanpublic LettuceConnectionFactory connectionFactory() {return new LettuceConnectionFactory();}}3. Session集群同步问题image四、Token去中心化的身份令牌4.1 什么是TokenToken是一种自包含的身份凭证服务器不需要在服务端存储会话状态所有必要信息都包含在Token本身中。Token vs Session 核心区别image4.2 Token实战代码// 生成Tokenpublic String generateToken(User user) {long currentTime System.currentTimeMillis();return JWT.create().withIssuer(myapp) // 签发者.withSubject(user.getId()) // 用户ID.withClaim(username, user.getUsername()).withClaim(role, user.getRole()).withIssuedAt(new Date(currentTime)) // 签发时间.withExpiresAt(new Date(currentTime 3600000)) // 过期时间.sign(Algorithm.HMAC256(secret)); // 签名密钥}// 验证Tokenpublic boolean validateToken(String token) {try {JWTVerifier verifier JWT.require(Algorithm.HMAC256(secret)).withIssuer(myapp).build();DecodedJWT jwt verifier.verify(token);return true;} catch (JWTVerificationException exception) {return false;}}五、JWT现代化的Token标准5.1 什么是JWTJWTJSON Web Token是一种开放标准RFC 7519用于在各方之间安全地传输信息作为JSON对象。这种信息可以被验证和信任因为它是数字签名的。JWT结构header.payload.signature解码示例// Header{alg: HS256,typ: JWT}// Payload{sub: 1234567890,name: John Doe,iat: 1516239022,exp: 1516242622}// SignatureHMACSHA256(base64UrlEncode(header) . base64UrlEncode(payload),secret)5.2 JWT实战代码// 创建JWTpublic String createJWT(User user) {return Jwts.builder().setHeaderParam(typ, JWT).setSubject(user.getId()).setIssuer(myapp).setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() 3600000)).claim(username, user.getUsername()).claim(role, user.getRole()).signWith(SignatureAlgorithm.HS256, secret.getBytes()).compact();}// 解析JWTpublic Claims parseJWT(String jwt) {return Jwts.parser().setSigningKey(secret.getBytes()).parseClaimsJws(jwt).getBody();}// 在Spring Security中使用JWTComponentpublic class JwtFilter extends OncePerRequestFilter {Overrideprotected void doFilterInternal(HttpServletRequest request,HttpServletResponse response,FilterChain chain) {String token resolveToken(request);if (token ! null validateToken(token)) {Authentication auth getAuthentication(token);SecurityContextHolder.getContext().setAuthentication(auth);}chain.doFilter(request, response);}}5.3 JWT的最佳实践1. 安全存储// 前端安全存储方案// 不推荐localStorage易受XSS攻击// 推荐HttpOnly Cookie防XSS或内存存储2. 令牌刷新机制// 双Token机制Access Token Refresh Tokenpublic class TokenPair {private String accessToken; // 短期有效1小时private String refreshToken; // 长期有效7天}// 刷新令牌接口PostMapping(/refresh)public ResponseEntity refresh(RequestBody RefreshRequest request) {String refreshToken request.getRefreshToken();if (validateRefreshToken(refreshToken)) {String userId extractUserId(refreshToken);String newAccessToken generateAccessToken(userId);return ResponseEntity.ok(new TokenPair(newAccessToken, refreshToken));}return ResponseEntity.status(401).build();}六、OAuth 2.0授权框架之王6.1 什么是OAuth 2.0OAuth 2.0是一个授权框架允许第三方应用在获得用户授权后代表用户访问受保护的资源。OAuth 2.0角色资源所有者Resource Owner用户客户端Client第三方应用授权服务器Authorization Server颁发访问令牌资源服务器Resource Server托管受保护资源6.2 OAuth 2.0授权码流程image6.3 OAuth 2.0实战代码// Spring Security OAuth2配置ConfigurationEnableAuthorizationServerpublic class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {Autowiredprivate AuthenticationManager authenticationManager;Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {clients.inMemory().withClient(clientapp).secret(passwordEncoder.encode(123456)).authorizedGrantTypes(authorization_code, refresh_token).scopes(read, write).redirectUris(http://localhost:8080/callback);}Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) {endpoints.authenticationManager(authenticationManager).tokenStore(tokenStore()).accessTokenConverter(accessTokenConverter());}}// 资源服务器配置ConfigurationEnableResourceServerpublic class ResourceServerConfig extends ResourceServerConfigurerAdapter {Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers(/api/public/**).permitAll().antMatchers(/api/private/**).authenticated().antMatchers(/api/admin/**).hasRole(ADMIN);}}七、五大概念对比为了让大家更清晰地理解这五个概念的关系和区别我准备了以下对比表格7.1 功能定位对比概念 本质 存储位置 主要用途 特点Cookie HTTP状态管理机制 浏览器 维持会话状态 自动携带有大小限制Session 服务端会话信息 服务器 存储用户状态 服务端状态需要存储管理Token 访问凭证 客户端/服务端 身份认证 自包含可验证JWT Token的一种实现标准 客户端/服务端 安全传输信息 标准化自包含可签名OAuth2 授权框架 不直接存储 第三方授权 标准化授权流程7.2 应用场景对比场景 推荐方案 原因说明传统Web应用 Session Cookie 简单易用生态成熟前后端分离应用 JWT 无状态适合API认证第三方登录 OAuth 2.0 标准化授权安全可靠微服务架构 JWT 分布式认证无需会话同步移动端应用 Token 轻量级适合移动网络7.3 安全考虑对比安全威胁 Cookie方案防护 Token/JWT方案防护XSS攻击 HttpOnly Cookie 避免localStorage存储CSRF攻击 SameSite Cookie 自定义HeaderCSRF Token令牌泄露 短期有效HTTPS 短期有效HTTPS刷新机制数据篡改 服务端验证 签名验证总结通过今天的深入探讨我们可以得出以下结论Cookie是载体HTTP协议的状态管理机制是Session和Token的传输媒介之一。Session是状态服务端维护的会话状态需要借助Cookie或URL重写来实现。Token是凭证认证授权的凭证可以放在Cookie、Header或URL中。JWT是标准Token的一种标准化实现自包含、可验证、可信任。OAuth2是框架授权框架定义了完整的第三方授权流程。最终建议简单Web应用Session Cookie前后端分离JWT HTTP Header第三方授权OAuth 2.0 JWT
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设asp编程深圳极速网站建设服务器

第一章:为什么顶尖工程师都在用Open-AutoGLM无线调试? 在现代软件开发与嵌入式系统调试中,效率与灵活性是决定项目成败的关键。Open-AutoGLM 作为一款开源的无线调试框架,正迅速成为顶尖工程师的首选工具。其核心优势在于无缝集成…

张小明 2025/12/26 3:42:35 网站建设

校园门户网站建设做思维导图好看的网站

Skywork-R1V多模态AI模型完整使用指南:从零开始掌握视觉推理能力 【免费下载链接】Skywork-R1V Pioneering Multimodal Reasoning with CoT 项目地址: https://gitcode.com/gh_mirrors/sk/Skywork-R1V Skywork-R1V系列是目前业界领先的开源多模态推理模型&am…

张小明 2026/1/3 14:06:42 网站建设

my网站域名找什么人做公司网站

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

张小明 2025/12/26 14:09:27 网站建设

如何网站做专题windows server2012 wordpress

告别枯燥公式!用动画重新定义你的微积分学习体验 【免费下载链接】videos 项目地址: https://gitcode.com/GitHub_Trending/vi/videos 还在为微积分中那些抽象的导数符号和复杂的积分公式感到头疼吗?🤔 每次看到极限、微分、积分的定…

张小明 2025/12/26 16:03:42 网站建设

网站开发的认知58同城做网站怎么做

概述 自9.2版本起,ONLYOFFICE桌面编辑器正式支持Windows ARM64平台。这意味着使用Surface Pro X或其他ARM架构Windows 11设备的用户现在可以原生安装这款办公套件,享受更稳定、更流畅的操作体验。 安装步骤 一、安装准备:适用设备与环境 系…

张小明 2025/12/26 18:32:26 网站建设

长乐区住房和城乡建设局网站平湖市住房建设局网站

亲爱的未来的我: 当你读到这封信时,已是2035年的冬天。时光荏苒,距离我——2025年的你,写下这些文字正好十年。此刻,我正坐在工位上,眼前是闪烁的代码和待执行的测试用例,耳边是团队讨论自动化…

张小明 2025/12/27 1:45:59 网站建设