身份验证是大多数网站的基本要求。 但是,有许多机制可以实现身份验证,并且它们之间不是很互换。 根据业务需求,开发人员需要为其应用程序选择最合适的身份验证方法。 除非人们很好地了解机制之间的差异,否则这可能不是一件容易的事。

在这篇简短的文章中,我想回顾一下实现身份验证的4种流行机制。 还要比较和考虑选择最合适的方法。

背景

在标准Java Web应用程序中,通常包含在请求,会话和身份验证中的两种元数据。 会话信息有助于使HTTP协议变为有状态,而认证信息则有助于识别用户。

通常,一个标头包含身份验证信息,另一个标头包含会话信息,或者一个标头包含两者。 请求也可以仅具有两个之一。

首次将HTTP作为无状态协议引入时,正式的身份验证机制是基本访问身份验证。 使用此身份验证方法,每个请求都必须包含包含加密的用户名和密码的标头。 显然,基本身份验证仅适用于安全通道。

尽管如此,许多人仍会觉得基本身份验证太不安全。 令人惊讶的是,基本身份验证要求客户端进行加密而不是对密码进行哈希处理。 更糟糕的是,每个请求中都包含加密的密码。 因此,如果黑客设法拦截单个请求,则显示用户密码。

为了加强认证机制,引入了摘要访问认证。 使用新的身份验证方法,客户端将发送用户名,密码,领域和服务器随机数的组合的哈希值。 当领域是固定的时,随机数可以是服务器发出的随机生成的值。 摘要身份验证的后续修改允许客户端也添加其随机数。 请注意,摘要身份验证在请求中发送用户名,随机数和领域的纯值。 这是一个例子

授权: 摘要用户名=“ some_user”,领域=“ Some Realm”,随机数=“ MTQyNjE1MDE5Njc0MjoxZjdkYjIzZjI0YjZjNDNDExMzU2OTk3MWIyNWQzYmYwNg ==”,uri =” c = 3,c3ec = c3ec = c3ec = c3ec = c3c3ec = c3c3e3 = c3c3e3c6e3c6e3c3e3e3c6e3c6e3c3e3c3e3c3e3c3e3c6e3c3c3e3c6e3c3c3c3c3c3c3c3c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c6c5c6c6c6c5c6c5c6c5c6要职位上的身分了=“ c61b667053c03c31”

在以上请求中,响应值是用户名,密码,领域,服务器随机数和客户端随机数的哈希值组合。 服务器计算自己的响应,如果响应匹配,则对用户进行身份验证。

摘要式身份验证几乎不可能通过拦截请求来弄清密码,并且还有助于防止重播攻击。 为此,应定期更改服务器随机数。 因此,在服务器随机数到期后重新发送请求将失败。

大多数读者可能会注意到这两种方法不再流行。 浏览器支持基于HTTP的身份验证机制,可能无法为用户提供漂亮的登录表单。 更糟糕的是,除非用户关闭浏览器或选项卡,否则它不提供注销的简便方法。 因此,基于会话的登录是当今首选的身份验证机制。 基本身份验证和摘要身份验证仍在使用,但主要用于不需要维护会话的B2B通信。

当HTTP为有状态时,基于会话的登录适用。 为此,在每个请求中都嵌入了一个会话cookie(通常将其命名为JSESSIONID)。 服务器将为其创建的每个会话创建一个会话存储。 当请求到达时,服务器将尝试在用户会话中查找用户配置文件。 如果用户配置文件不可用,则会向用户显示一个登录表单。 身份验证成功后,服务器会将用户配置文件存储到会话存储中。

此方法效果很好,但是如果将Web应用程序部署在群集环境中,则需要粘性负载平衡器。 否则,如果会话是由另一台服务器生成的,则该服务器将无法识别该会话。

对于云应用程序,最好使用包含用户信息的cookie构建客户端会话。 此会话cookie用签名保护。 为了避免频繁读取数据库,我们可以使用公用密钥来签名所有会话,而不是使用密码。

比较方式

了解每种机制后,让我们比较一下:

特征 基本认证 摘要式身份验证 服务器端会话 客户端会话
支持会议 没有 没有
登出 关闭浏览器 关闭浏览器 杀死会议 杀死会议
支持集群 需要粘性LB
防止重播攻击 没有 可选(会话超时) 最佳(在会话签名中包括时间戳)
客户计算 便宜的 便宜的
服务器计算 便宜的 便宜的 便宜的
客户端存储 用户名密码 用户名密码 会话cookie 会话cookie
服务器存储 会话存储
握手 不需要 至少2个要求 至少2个要求 至少2个要求
网络开销 短头 长头 短头 长头

结论

您可以看到上面的比较,然后自己做出选择。 对我来说,基本身份验证和摘要式身份验证似乎是构建B2B身份验证的更好选择。 但是,它们不太适合面向客户的应用程序。

在基本身份验证和摘要身份验证之间进行选择仅取决于您的频道的安全性。 大多数情况下,使用摘要身份验证来保护我们的应用程序是值得的,因为网络,握手和计算开销不是很多。

对于面向客户的UI,我希望客户端会话胜于服务器端会话,因为它们可以更好地扩展。 您总是可以投入新的服务器来分担工作量。 对于服务器端会话,除非您可以克隆会话存储,否则其他服务器只能服务新会话,而不能服务现有会话。

客户端会话的问题是在会话cookie中公开了用户信息。 因此,您只能在会话中放入原始值,而不能放入机密值。 如果您可以承受该限制,那么客户端会话无疑是更好的选择。

翻译自: https://www.javacodegeeks.com/2015/03/authentication-mechanisms-for-web-applications.html

Web应用程序的身份验证机制相关推荐

  1. 如何使用json开发web_如何通过使用JSON Web令牌简化应用程序的身份验证

    如何使用json开发web by Sudheesh Shetty 由Sudheesh Shetty 如何通过使用JSON Web令牌简化应用程序的身份验证 (How to simplify your ...

  2. ASP.NET身份验证机制membership入门——配置篇(1){转}

    几乎所有的系统中都会使用到访问控制和角色管理这样的功能,例如:新建.修改.删除用户和角色,为用户分配角色,管理角色中的用户等等.于是MS在ASP.NET 2.0开始,实现了这些功能,使得我们在开发中, ...

  3. ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) (转载)

    ASP.Net 2.0窗体身份验证机制详解(FormsAuthentication) 收藏 转自:http://www.aspxclub.com/l12/c_3689.html 本篇文章介绍了在ASP ...

  4. Java学习笔记_身份验证机制

    身份验证机制(authentication):确定一个用户具有自己声称的那个身份 应用程序关心用户是否通过了验证而不关心是通过何种方式进行的验证??? 授权(访问控制:authorization):★ ...

  5. WEB安全基础入门—身份验证漏洞

    欢迎关注订阅专栏! WEB安全系列包括如下三个专栏:! <WEB安全基础-服务器端漏洞> <WEB安全基础-客户端漏洞> <WEB安全高级-综合利用> 知识点全面细 ...

  6. 登录工程二:现代 Web 应用的典型身份验证需求

    朋友就职于某大型互联网公司.前不久,在闲聊间我问他日常工作的内容,他说他所在部门只负责一件事,即用户与登录. 而他的具体工作则是为各个业务子网站提供友好的登录部件(Widget),从而统一整个网站群的 ...

  7. 登录工程:现代 Web 应用的典型身份验证需求

    朋友就职于某大型互联网公司.前不久,在闲聊间我问他日常工作的内容,他说他所在部门只负责一件事,即用户与登录. 而他的具体工作则是为各个业务子网站提供友好的登录部件(Widget),从而统一整个网站群的 ...

  8. 登录工程:传统 Web 应用中的身份验证技术

    标题中 "传统 Web 应用" 这一说法也并没有什么官方定义,只是为了与"现代化 Web 应用"形成比较而自拟的一个概念.所谓现代化 Web 应用指的是那些基于 ...

  9. 微信小程序***实现身份验证

    标题微信小程序***实现身份验证 本次实现了身份验证功能,本功能需要提交身份证正面照片,反面照片,手持身份证等四张张照片,提交成功后等待工作平台审核,审核成功后即可完成身份验证. WXML: JS: ...

最新文章

  1. web前端的就业前景好不好
  2. 获取文件名和路径函数
  3. CCF201612-4 压缩编码(100分)
  4. Windows7是什么
  5. linux sudo 必须属于用户ID0,sudo:/usr/bin/sudo 务必属于用户 ID 0(的用户)并且设置 setuid 位...
  6. C#学习日志三(流程控制语句)
  7. Linux 输入输出重定向 2>/dev/null和>/dev/null 2>1和2>1>/dev/nul
  8. Spring Boot JDBC
  9. Java笔记-java web实现验证码
  10. Python 安装 lxml 插件
  11. js获取(URL)地址栏参数
  12. Codeforces 700 C. Break Up(Tarjan求桥)
  13. 《计算机操作系统》(第四版)知识点总结
  14. CISSP第一章:安全与风险管理知识点
  15. 股票行情图的绘制,分时图和闪电图
  16. 移动端webscoket连接失败---code1006
  17. Java——OOP三大特性之封装性(Encapsulation)通俗详细
  18. csp2015-03
  19. Android的 animation (总结)
  20. 遇到vmware提示客户机操作系统已禁用 CPU.请关闭或重置虚拟机

热门文章

  1. android区域和gynoid区域,Roux-en-Y胃肠转流术后2型糖尿病患者体脂分泌和胰岛素抵抗的变化...
  2. 嗨播总是显示与服务器断开连接,嗨播直播常见问题一览
  3. 【basler】Chapter5:basler相机C#代码实现与详解
  4. 实现H264格式视频的流媒体播放
  5. stm32+esp8266(wifi模块)+贝壳物联+开关控制
  6. android自动更新应用未安装
  7. 基于SpringBoot的大学生租房系统
  8. window.showModalDialog不兼容的解决方案
  9. 【Cucumber系列】Junit Test Runner和CucumberOptions
  10. [Unity] 优化您的移动游戏性能2020(中)