”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 了解Web身份验证:会议与JWTS

了解Web身份验证:会议与JWTS

发布于2025-03-23
浏览:122

构建安全的Web应用程序时,选择正确的身份验证机制至关重要。今天,我们正在探索两种广泛使用的方法:基于session Authentication 。通过了解他们的工作流,优势和权衡,您将有能力确定哪种最适合您的应用程序。


这是基于会话的身份验证的工作方式:

[2
  1. 用户将登录凭据发送到服务器。

    服务器验证它们,如果有效,则会创建一个会话。

    会话数据(例如,用户ID,到期时间)存储在数据库中的服务器或REDIS之类的缓存中。
    • [2
    • 服务器通常作为cookie向客户端发送唯一的会话ID。
  2. 客户端自动通过每个请求发送会话ID cookie。

    服务器使用此ID检索会话数据并验证用户。
    [2
  3. 关键好处

      :通过删除会话数据可以随时无效。
    • 集中安全性
    • :敏感信息停留在服务器上。

挑战Understanding Web Authentication: Sessions vs. JWTs

分布式系统

:在多服务器环境中,所有服务器都需要访问相同的会话数据,需要像redis这样的集中式会话存储。
  • 添加了延迟:获取会话数据向每个请求添加开销。
  • 基于JWT的身份验证

[2
  • 用户将登录凭据发送到服务器。 该服务器验证它们并生成包含用户数据的签名JWT。
  • 客户端存储JWT(例如,在本地存储或cookie中)。

客户端在请求标题中发送JWT。 该服务器验证令牌的签名并使用其数据进行身份验证。

    [2
  1. 关键好处

    • 无状态和可伸缩
    • :没有将会话数据存储在服务器上,这使JWTS非常适合水平可扩展的应用程序。
    • Inter-Service兼容性
    • :在微服务体系结构中,服务可以在经过验证的JWT中信任数据,而无需查询身份验证服务。
  2. 挑战

    • 令牌有效期
    • :如果被盗,则JWT有效,直到其到期为止。
    安全权衡
  3. :服务器必须实现诸如刷新令牌之类的机制以提高安全性。

Understanding Web Authentication: Sessions vs. JWTs

    HMAC
  • :对称键用于签名和验证。简单,但需要共享钥匙,这可能会带来风险。
  • rsa/ecdsa
  • :不对称密钥确保私有钥匙符号令牌,而公共密钥对其进行验证,从而增强了分布式系统的安全性。

何时使用每个方法 [2

    理想当您需要立即会话撤销时。
  • 适用于集中式数据存储的应用。
  • 将敏感数据保留在服务器上,并增强安全性。
  • [2
  • 最适合无状态的可扩展体系结构。

在微服务中有用或与第三方服务共享身份验证数据时。

将JWT与刷新令牌配对,以平衡安全性和用户体验。

  • 最终,您的选择取决于应用程序的体系结构,扩展要求和安全需求。无论您是参加会议还是JWT,了解这些机制都可以确保安全且无缝的用户体验。
版本声明 本文转载于:https://dev.to/arnav2004/understanding-web-authentication-sessions-vs-jwts-34nf?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-18
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-04-18
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-04-18
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-04-18
  • ReqWeb新版本即将发布:期待的功能更新
    ReqWeb新版本即将发布:期待的功能更新
    当我开始开发reqweb时,我的目标很简单:创建一个强大的,轻巧的Web应用程序防火墙(WAF),任何人都可以用来保护其Web应用程序。随着时间的流逝,它已成长为可靠的解决方案,应对IP过滤,速率限制,基于规则的阻塞以及通过实时警报进行记录等挑战。现在,下一个大型飞跃是Reqweb 2.0即将到来...
    编程 发布于2025-04-18
  • 如何解决Python脚本中的“非ASCII字符”错误?
    如何解决Python脚本中的“非ASCII字符”错误?
    "Non-ASCII Characters" Errors in Python ScriptsWhen working with text that contains non-ASCII characters in Python, errors like "Syntax...
    编程 发布于2025-04-18
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-04-18
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-04-18
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-18
  • Flexbox中边距与标准CSS布局的区别
    Flexbox中边距与标准CSS布局的区别
    在flexbox 问题:non-flexbox vs. flexbox margins According to the CSS Box Model specification:"A flex container establishes a new flex formatting...
    编程 发布于2025-04-18
  • LINQ方法中哪些保持数组顺序,哪些不保持?
    LINQ方法中哪些保持数组顺序,哪些不保持?
    LINQ 与数组顺序:详解哪些方法保持顺序,哪些方法不保持 在对已排序数组使用 LINQ to Objects 操作时,务必注意避免破坏原始数组顺序的操作。以下分析将为您提供指导: 绝对保持顺序的方法: AsEnumerable: Cast: Concat: Select: ToArray: To...
    编程 发布于2025-04-18
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-04-18
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-04-18
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-04-18
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3