当前位置: 首页 > news >正文

HTTP——学习笔记(7)

HTTP中的认证机制

 

什么是认证机制?:

服务器需要知道客户端是谁。

 

怎样知道客户端身份?:

核对“登录者本人才知道的信息”

  密码:只有本人才会知道的字符串信息

  动态令牌:仅限本人持有的设备内显示的一次性密码

  数字证书:仅限本人(终端)持有的信息

  生物证书:指纹和虹膜等本人的生理信息

  IC卡等:仅限本人持有的信息

 

HTTP/1.1使用的认证方式有哪些?:

BASIC认证(基本认证)

DIGEST认证(摘要认证)

SSL客户端认证

FormBase认证(基于表单认证)

此外,还有Windows统一认证(Keberos认证,NTLM认证)

 

BASIC认证步骤:

1.当请求的资源需要BASIC认证时,服务器会随状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含认证的方式(BASIC)及Request-URI安全域字符串

2.接受到状态码401的客户端为了通过BASIC认证,需要将用户ID及密码发送给服务器。发送的字符串内容是由用户ID和密码构成,两者中间以冒号连接后,再经过Base64编码处理。当用户代理为浏览器时,用户仅需输入用户ID和密码即可,之后,浏览器会自动完成到Base64编码的转换工作

3.接收到包含首部字段Authorization请求的服务器,会对认证信息的正确性进行验证。如验证通过,则返回一条包含Request-URI资源的响应。

BASIC认证缺点:

  1.虽然采用了Base64编码方式,但是并不是加密处理,信息仍有被窃听的危险

  2.除此之外想再进行一次BASIC认证时,一般的浏览器却无法实现认证注销操作

BASIC不够灵活,不常用

 

DIGEST认证步骤:

1.请求需认证的资源时,服务器会随着状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(随机数,nonce)和realm字段信息

2.接受到401状态码的客户端,返回的响应中包含DIGEST认证必须的首部字段信息Authorization

信息。首部字段Authorization内必须包含username,realm,nonce,uri和response的字段信息。其中,realm和nonce就是之前从服务器接受到的响应中的字段

3.接受到包含首部字段Authorization请求的服务器,会确认认证信息的正确性。认证通过后则返回包含Request-URI资源的响应,并且这时会在首部字段Authorization-Info写入一些认证成功的相关信息

缺点:  

  使用上不便捷灵活,并且仍然达不到多数WEB网站对高度安全等级的追求标准。

 

SSL客户端认证步骤:

1.接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书(需要时先将客户端证书分发给客户端,且客户端必须安装此证书)

2.用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器

3.服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信

缺点:

  需要支付高额的费用

 

基于表单验证:

输入已事先登录的用户ID,和密码等登录信息后,发送给WEB应用程序,基于认证结果来决定认证是否成功

步骤:

1.客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。而这时,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。

2.服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器端(在首部字段Set-Cookie内写入Session ID)

3.客户端接收到从服务器端发来的Session ID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID也随之发送到服务器。服务器端可通过验证接收到的Session ID识别用户和其认证状态

注:密码加盐:一种服务器端保存用户密码加密方式,由服务器随机生成一个字符串,保证长度足够长,并且是真正随机生成的。然后把它和密码字符串相连接(前后都可以)生成散列值。当两个用户使用了用一个密码时,由于随机生成的salt值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。

转载于:https://www.cnblogs.com/ljuyi/p/6063594.html

相关文章:

  • 《java与模式》学习系列——单例模式
  • UML中类之间的关系
  • 找出数组中两个只出现一次的数字
  • python学习之字典
  • 《java与模式》学习系列——适配器模式
  • javascript模板库jsrender加载并缓存外部模板文件
  • 《java与模式》学习系列——装饰模式
  • 初始化Git的配置
  • 《java与模式》学习系列——享元模式
  • Java WebService 简单实例
  • java.lang.instrument使用
  • 《java与模式》学习系列——门面模式
  • 《java与模式》学习系列——桥梁模式
  • 《java与模式》学习系列——观察者模式
  • angularjs服务-service
  • SegmentFault for Android 3.0 发布
  • 【Linux系统编程】快速查找errno错误码信息
  • CentOS7简单部署NFS
  • Docker下部署自己的LNMP工作环境
  • HTTP请求重发
  • Java的Interrupt与线程中断
  • Java多态
  • Objective-C 中关联引用的概念
  • vue2.0项目引入element-ui
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从0实现一个tiny react(三)生命周期
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 排序算法之--选择排序
  • 删除表内多余的重复数据
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 项目管理碎碎念系列之一:干系人管理
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 原生js练习题---第五课
  • 积累各种好的链接
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $forceUpdate()函数
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (C语言)字符分类函数
  • (java)关于Thread的挂起和恢复
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)Sql Server 保留几位小数的两种做法
  • (转)VC++中ondraw在什么时候调用的
  • (转)详解PHP处理密码的几种方式
  • .net core 6 集成和使用 mongodb
  • .net core Swagger 过滤部分Api
  • .NET Core中Emit的使用
  • .NET Standard 的管理策略