zoukankan      html  css  js  c++  java
  • http 笔记 基本认证机制

    认证意味着要证明你是谁。通常是通过提供用户名和密码来进行。http为认证提供了一种原生工具。

    http提供了一个原生的质询/响应 框架,简化了对用户 认证过程。

    Web应用程序收到一条http请求报文时,服务器没有按照请求执行动作,而是以一个 认证质询 进行响应,要求用户提供一些保密信息来说明他是谁,从而对其进行质询。

    用户再次发起请求时,要附上保密证书 用户名密码。如果证书不匹配,服务器可以再次质询客户端,或产生一条错误信息。如果证书匹配,就可以正常完成请求了。

    http定义了两个认证协议:基本认证和摘要认证

    认证的4个步骤:

    1 请求 第一条请求没有认证信息 GET

    2 质询 www-authenticate 服务器用401状态拒绝了请求,说明需要用户提供用户名和密码。在www-authenticate首部说明 如何以及在哪里进行认证。

    3 授权 authorization 客户端重新发出请求,这一次会附加一个authorization首部,用来说明认证算法,用户名和密码 GET

    4 成功 Authentication-Info 如果授权证证书是正确的,服务器就会将文档返回。200。对高级认证算法来说,可能还会在authentication-info首部附加一些额外的信息。

    基本认证

    基本认证中,web服务器可以拒绝一个事务,质询客户端,请用户提供有效的用户名和密码。服务器会返加401状态码,并用WWW-Authenticate响应首部指定要访问的安全域。浏览器收到质询时,会打开一个对话框,请求用户输入 这个域的用户名和密码。然后将用户名和密码退而加扰码,再用authorization请求首部回送给服务器

    http基本认证将 由冒号分隔的 用户名和密码打包在一起,并用base-64编码方式对其进行编码。

    代理认证

    有些组织会在用户访问服务器、lan 或无线网络之前,用代理服务器对其进行认证。可以在代理服务器上对访问策略进行集中管理 。

    代理认证的步骤与web服务器身份验证的步骤相同。但首阁和状态码有所不同。407 proxy-authenticate

    基本认证并不安全。只能用来防止非恶意用户无意间进行的访问,或将其与SSL这样 加密技术配合使用。

    安全缺陷:

    1 基本认证会通过网络发送用户名和密码,这些用户名和密码都是以一种很容易解码的形式表示的。实际上,密码是以明文形式传输的,任何人都可以读取并将其捕获。虽然base-64编码通过隐藏用户名和密码,致使友好的用户不太可能在进行网络观没时无意中看到密码,但base-64编码的用户名和密码可以很轻易地通过反向编码过程进行解码,甚至可以用纸笔在几秒种内手工对其进行解码!所以经过base-64编码的密码实际上就是明文传送的。

    2 即使密码是以更难解码的方式 加密的,第三方用户仍然可以捕获被修改过 用户名和密码,并将修改过的用户名和密码一次一次地重放给原始服务器,以获得对服务器的访问权。没有什么措施可用来防止这些重放攻击。

    3 基本认证没有提供任何针对代理和作为中间人的中间节点的防护措施,它们没有修改认证首部,但却修改了报文的其余部分。

    4 假冒服务器很容易骗过基本认证。如果在用户实际连接到一台恶意服务器或网关的时候,能够让用户相信他连接的是一个受基本认证保护的合法主机,攻击者就可以请求用户输入密码,将其存储起来以备未来使用,然后捏造一条错误信息传送给用户。

    将基本认证与加密数据传输(比如 ssl)配合使用,向恶意用户隐藏用户名和密码,会使基本认证变得更加安全。这是一种常用的技巧。

  • 相关阅读:
    为什么世界上没有安全的工作?
    GIT学习----第六节:撤销修改
    vue-cli中koa输出console.log报错的解决方案
    简易版promise源码实现
    bind函数的模拟实现
    Es6语法实现的转盘抽奖效果——可配置转盘的抽奖概率
    探寻Object.assign内部的奥秘
    promise基本使用——简单的运动效果
    数组sort方法源码解析
    ES5数组一些常用的方法源码实现
  • 原文地址:https://www.cnblogs.com/caojuansh/p/13158962.html
Copyright © 2011-2022 走看看