让别人做网站的话术怎么查有做网站的公司
2026/1/10 9:05:24 网站建设 项目流程
让别人做网站的话术,怎么查有做网站的公司,如何设计一个网页界面,关闭wordpress多站点诸神缄默不语-个人技术博文与视频目录 文章目录 什么是JWT#xff1f;一个简单的比喻为什么需要JWT#xff1f;JWT长什么样#xff1f;1. 头部#xff08;Header#xff09;2. 载荷#xff08;Payload#xff09;3. 签名#xff08;Signature#xff09; 用Python玩转…诸神缄默不语-个人技术博文与视频目录文章目录什么是JWT一个简单的比喻为什么需要JWTJWT长什么样1. 头部Header2. 载荷Payload3. 签名Signature用Python玩转JWT场景1用户登录后生成JWT场景2验证收到的JWT场景3完整的登录验证流程JWT的实际应用场景1. **单点登录SSO**2. **API身份验证**3. **信息交换**重要安全注意事项✅ **应该做的**❌ **不要做的**常见问题解答总结什么是JWT一个简单的比喻想象一下你去参加一个大型会议。第一次入场时工作人员检查你的购票信息确认无误后给你戴上一个手环。之后在会议期间你进出各个分会场、领取茶歇、参加活动只需要亮出手环就可以了不需要反复出示购票凭证。JWTJSON Web Token就是这个数字世界的“手环”。它是一种让Web应用安全传递信息的方式解决了“如何证明你是你”的问题。为什么需要JWT在传统网站中服务器通过“会话”Session记录用户登录状态。但这有几个问题服务器需要存储大量会话数据用户多了内存压力大难以扩展多台服务器之间要同步会话信息不适合移动端和API服务JWT的出现解决了这些问题信息都存在令牌里服务器不用存只需要验证令牌是否有效即可。JWT长什么样一个JWT看起来像这样实际是一长串这里折行显示eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c它由三部分组成用点.分隔头部Header载荷Payload签名Signature1. 头部Header就像信封的“说明标签”告诉别人这个令牌的基本信息{alg:HS256,// 签名算法HS256typ:JWT// 类型JWT}2. 载荷Payload这是令牌的“核心内容”存放实际要传递的信息{sub:1234567890,// 用户IDname:John Doe,// 用户名iat:1516239022,// 签发时间exp:1516242622// 过期时间}3. 签名Signature这是最关键的部分它像“防伪标识”确保令牌没有被篡改。签名的生成方式HMACSHA256( base64UrlEncode(头部) . base64UrlEncode(载荷), 密钥 )用Python玩转JWT让我们通过代码实际体验一下JWT的使用。首先安装必要的库pipinstallPyJWT场景1用户登录后生成JWTimportjwtimportdatetime# 密钥重要实际项目中要从安全的地方获取SECRET_KEYmy_secret_key_12345defcreate_jwt(user_id:str,username:str)-str: 创建JWT令牌 # 设置令牌的过期时间例如24小时后expirationdatetime.datetime.now(datetime.timezone.utc)datetime.timedelta(hours24)# 构建载荷Payloadpayload{user_id:user_id,username:username,exp:expiration,# 过期时间iat:datetime.datetime.now(datetime.timezone.utc)# 签发时间}# 生成JWTtokenjwt.encode(payload,SECRET_KEY,algorithmHS256)returntoken# 示例用户登录成功后生成令牌tokencreate_jwt(user123,张三)print(生成的JWT令牌)print(token)print(-*50)场景2验证收到的JWTimportjwtfromtypingimportDict# 密钥重要实际项目中要从安全的地方获取SECRET_KEYmy_secret_key_12345defverify_jwt(token:str)-Dict: 验证JWT令牌 返回解码后的数据或抛出异常 try:# 验证并解码令牌payloadjwt.decode(token,SECRET_KEY,algorithms[HS256])return{valid:True,data:payload,message:令牌有效}exceptjwt.ExpiredSignatureError:return{valid:False,data:None,message:令牌已过期}exceptjwt.InvalidTokenError:return{valid:False,data:None,message:无效的令牌}# 示例验证令牌print(验证令牌结果)resultverify_jwt(token)# 在这里输入上一节返回的JWT tokenifresult[valid]:print(✓ 令牌有效)print(f用户信息{result[data]})else:print(f✗{result[message]})print(-*50)输出验证令牌结果 ✓ 令牌有效 用户信息{user_id: user123, username: 张三, exp: 1766732992, iat: 1766646592}场景3完整的登录验证流程importjwtimportdatetimefromtypingimportDict# 密钥重要实际项目中要从安全的地方获取SECRET_KEYmy_secret_key_12345defcreate_jwt(user_id:str,username:str)-str: 创建JWT令牌 # 设置令牌的过期时间例如24小时后expirationdatetime.datetime.now(datetime.timezone.utc)datetime.timedelta(hours24)# 构建载荷Payloadpayload{user_id:user_id,username:username,exp:expiration,# 过期时间iat:datetime.datetime.now(datetime.timezone.utc)# 签发时间}# 生成JWTtokenjwt.encode(payload,SECRET_KEY,algorithmHS256)returntokendefverify_jwt(token:str)-Dict: 验证JWT令牌 返回解码后的数据或抛出异常 try:# 验证并解码令牌payloadjwt.decode(token,SECRET_KEY,algorithms[HS256])return{valid:True,data:payload,message:令牌有效}exceptjwt.ExpiredSignatureError:return{valid:False,data:None,message:令牌已过期}exceptjwt.InvalidTokenError:return{valid:False,data:None,message:无效的令牌}# 模拟用户数据库users_db{user123:{password:password123,# 实际中应该存储哈希值而不是明文username:张三,role:user},admin001:{password:admin_pass,username:管理员,role:admin}}deflogin_and_get_token(user_id:str,password:str): 模拟登录过程 # 1. 检查用户是否存在ifuser_idnotinusers_db:returnNone,用户不存在# 2. 验证密码ifusers_db[user_id][password]!password:returnNone,密码错误# 3. 生成JWT令牌user_infousers_db[user_id]tokencreate_jwt(user_id,user_info[username])returntoken,登录成功defaccess_protected_resource(token:str): 访问需要权限的资源 resultverify_jwt(token)ifnotresult[valid]:returnf访问被拒绝{result[message]}user_dataresult[data]returnf欢迎{user_data[username]}您已成功访问受保护资源。# 模拟完整流程print( 完整登录访问流程 )# 1. 用户登录print(1. 用户登录...)token,messagelogin_and_get_token(user123,password123)print(f登录结果{message})iftoken:print(f获取到的令牌{token[:50]}...)print(-*30)# 2. 访问受保护资源print(2. 访问受保护资源...)iftoken:responseaccess_protected_resource(token)print(response)print(-*30)# 3. 演示过期令牌print(3. 演示过期令牌...)# 创建一个立即过期的令牌expired_payload{user_id:user123,username:张三,exp:datetime.datetime.now(datetime.timezone.utc)-datetime.timedelta(seconds1),# 1秒前过期iat:datetime.datetime.now(datetime.timezone.utc)-datetime.timedelta(hours1)}expired_tokenjwt.encode(expired_payload,SECRET_KEY,algorithmHS256)responseaccess_protected_resource(expired_token)print(response)输出 完整登录访问流程 1. 用户登录... 登录结果登录成功 获取到的令牌eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkI... ------------------------------ 2. 访问受保护资源... 欢迎 张三您已成功访问受保护资源。 ------------------------------ 3. 演示过期令牌... 访问被拒绝令牌已过期JWT的实际应用场景1.单点登录SSO用户在一个系统登录后无需在其他关联系统重新登录。2.API身份验证移动App、前端应用调用后端API时携带JWT。3.信息交换安全地在各方之间传递信息因为签名可以验证内容是否被篡改。重要安全注意事项✅应该做的使用HTTPS防止令牌在传输中被窃取设置合理的过期时间通常几小时到几天存储敏感信息要加密载荷默认只是编码不是加密密钥要足够复杂并且定期更换❌不要做的不要在JWT中存储密码等敏感信息不要将密钥硬编码在代码中不要使用弱签名算法前端存储要注意XSS攻击考虑使用HttpOnly Cookie常见问题解答QJWT和Session有什么区别ASession把用户状态存在服务器JWT把状态存在令牌里发给客户端。QJWT被偷了怎么办A就像手环被偷一样小偷可以冒充你。因此过期时间要短重要操作需二次验证。Q如何让JWT失效AJWT一旦签发在过期前无法主动失效。解决方案使用短有效期刷新令牌机制或维护一个小的令牌黑名单。总结JWT就像数字世界的“身份证防伪标识”头部说明类型和算法载荷携带实际信息签名确保不被篡改它的优点是无状态、易扩展适合现代分布式应用。但也要注意安全使用特别是密钥管理和令牌存储。希望这篇介绍能帮你理解JWT在实际项目中合理使用JWT能让你的应用更安全、更高效。提示本文示例代码用于学习演示实际生产环境中需要考虑更多安全因素。建议使用成熟的认证库如Authlib、Django REST Framework JWT等来处理复杂的认证场景。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询