HTTP基本认证

众所周知,Web使人们可以很方便的访问分布在世界各个角落里信息。但是仅仅是方便还是不够的,并不是所有的信息都适合在互联网上公开访问,我们需要保证只有特定的人才能看到我们的敏感信息并且执行特定的操作。

服务器需要通过某种方式了解访问用户的身份。一旦服务器知道了用户身份,就可以判断用户可以访问的事务和资源了。认证意味着要证明客户端访问用户是谁。通常情况是通过提供用户名和密码来认证的。HTTP为我们提供了一些原生的工具。今天我们来看下基本认证。

HTTP质询/响应认证框架

HTTP提供了一个原生的质询/响应框架,简化了对用户的认证过程。HTTP的认证模型如图所示。

Web服务器接收到一条HTTP请求报文时,服务器没有直接响应请求的资源,而是以一个“认证质询”进行响应,要求用户提供一些保密信息来说明其身份。用户再次发起请求时,要附上保密证书(用户名和密码)。如果与要求的不匹配,服务器可以再次质询客户端,或者产生一条错误信息。如果证书匹配则返回请求的资源。

认证协议与首部

  1. HTTP提供可定制的控制首部,为不同的认证协议提供了一个可扩展框架。
  2. HTTP提供了两个认证协议:基本认证和摘要认证。

基本认证实例

  1. 客户端请求某资源。
  2. 服务器对用户进行质询时,会返回一条401Unauthorized响应,并在WWW-Authenticate首部中说明可以使用的认证方式。
  3. 客户端重新发送请求,并在Authorization首部附加上用户名、密码等其他一些认证参数。
  4. 授权成功完成后,服务器会返回一个正常的状态码(比如,200  OK),对于高级算法来说,可能还会在Authentication-Info首部附加额外的信息。

HTTP基本认证将用户名和密码打包在一起,并使用base-64编码方式对其进行编码。具体过程如下图所示。

基本认证的安全缺陷

  1. 基本认证通过网络发送用户名和密码,虽然进行base-64编码可以隐藏用户名和密码,但是很容易通过反向编码过程进行解码。
  2. 即使密码以更加难以解码的方式加密,第三方用户仍然可以捕获被修改过的用户名和密码,并通过重放攻击获取服务器的访问权限。
  3. 很多用户会将不同的服务使用相同的用户名和密码,基本认证直接发送用户名和密码,会对一些重要的服务(比如在线银行网站)造成威胁。
  4. 基本认证没有提供任何针对代理和中间人节点的防护措施,他们没有修改认证首部,但却修改了报文的其余部分,这样就严重的改变了事务的本质。
  5. 假冒服务器很容易骗过基本认证。如果在用户实际链接到一台恶意服务器或者网关的时候,能够让用户相信他链接的是一个受基本认证保护的合法主机,攻击者就可以请求用户输入密码。
  6. IIS中站点默认开启匿名身份验证,并可以直接访问。

基本认证实例

  1. IIS中站点默认开启匿名身份验证,并可以直接访问

2. 关闭匿名认证,开启基本认证方式,直接访问需要输入用户名密码

3.客户端模拟基本认证过程

控制台模拟代码如下

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication_HttpSec
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("HTTP://Localhost"));
            request.Method = "Get";

            WebResponse response = null;
            try
            {
                response = request.GetResponse();
            }
            catch (WebException ex)
            {
                Console.WriteLine("访问发生异常,异常信息如下:"+ ex.Message);
                Console.WriteLine("异常信息返回的质询响应头为:");
                foreach (string key in ex.Response.Headers.Keys)
                {
                    Console.WriteLine("     "+ key +":"+ex.Response.Headers[key]);
                }

                Console.WriteLine("添加Authorization认证头部并重新发送请求");
                HttpWebRequest request2 = (HttpWebRequest)HttpWebRequest.Create(new Uri("HTTP://Localhost"));
                request2.Method = "Get";
                request2.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("administrator:[email protected]")));
                try
                {
                    response = request2.GetResponse();
                }
                catch (WebException ex2)
                {
                    Console.WriteLine("添加Authorization认证头部并重新发送请求发生异常:"+ex2.Message);
                    Console.Read();
                    return;
                }
                Stream stream =  response.GetResponseStream();
                System.IO.StreamReader reader = new StreamReader(stream);
                string content = reader.ReadToEnd();
                Console.WriteLine("请求响应的内容如下");
                Console.WriteLine(content);
            }

            Console.Read();

        }
    }
}

  

时间: 2024-07-29 01:55:40

HTTP基本认证的相关文章

shiro实现APP、web统一登录认证和权限管理

先说下背景,项目包含一个管理系统(web)和门户网站(web),还有一个手机APP(包括Android和IOS),三个系统共用一个后端,在后端使用shiro进行登录认证和权限控制.好的,那么问题来了web和APP都可以用shiro认证吗?两者有什么区别?如果可以,解决方案是什么?看着大家焦急的小眼神,接下来挨个解决上面的问题. web和APP可以用shiro统一登录认证吗? 可以.假如web和APP都使用密码登录的话,那没的说肯定是可以的,因为对于shiro(在此不会介绍shiro详细知识,只介

微信公众号之订阅号(已认证)实现oauth2授权登录详细步骤介绍

一: 简介 通过 微信公众平台---->权限接口 可以得知 微信的订阅号是没有授权登录接口的,只有服务号才有该权限.这点微信公众平台在多处反复强调 最终的事实是:微信订阅号是可以实现授权登录的! 二:具体实现步骤: 1. 首先在 微信公众平台(https://mp.weixin.qq.com/) [开发]----> [基本配置]----->[服务器配置]完成基本的配置信息 URL: 这里的地址我写的是我们HTML5项目的某个Controller或Servlet的地址,例如 http://

NetScaler OTP双因子身份认证登录演示

NetScaler OTP 应用场景 NetScaler OTP(one time password)是双因子身份证的一种,利用用户名密码+6位时间型令牌认证码,完成身份认证. 在以前的双因子解决方案中NetScalerGateway需要与第三方 Radius服务器集成,实现双因子认证.对于客户来说,需要额外支付双因子身份认证的费用,提高了解决方案成本. NetScaler OTP解决方案利用NetScaler 源生功能,配合手机APP  google authenticator,不需要其他成本

C#认证第一章1 题 11题

C#第一章第一题 C#认证第一章  11题

政府部门没组织机构代码、法人证书,怎么开通认证微信公众平台?

政府机关微信公众号认证流程:1.确定需要认证的名字:如xx大队.xx局:2.准备资料:单位证件.运营人身份证.联系手机.登陆邮箱:3.确定类型:订阅号or服务号:资料准备好后,可直接联系公众平台服务商"杰客科技"的客服人员,2天内便可完成认证. 注意事项:1.政府机关认证时需要盖章,没有公章将无法认证:2.公众号认证后,排名将更靠前并显示v标志. 政府微信公众平台开通及认证:http://www.jcjclu.com/apply/201603149.html客服QQ:180805782

QQ群认证 人数再度扩容 权限随之升级

群排名,得资源得天;之于排名,群容量有杠杆意义. 而今,流量分散,打法完全无法集中,全平台战略,越发凸显.QQ群,已是必争之地. 去年,Q群霸屏春天,一切那么顺其自然;而今,除了拼资源,还是拼资源.除去小号资源,于等级之外,认证一出,必须拿下. 认证QQ群有什么用? 为毛要认证,就凭你随便呱唧几句?说得这么流弊,认证QQ群具体有哪些用处? 1.认证标识,犹如QQ空间的认证,一个加V的标识,凸显权威性官方性. 2.在群检索中,搜索权重会自带光环(高高的),平台会予以很好的排名,这个是申请者核心诉求

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

[CentOS 7系列]使用密钥认证机制远程登录

当服务器操作系统没有配置远程密钥认证时,默认需要手动输入密码口令. 以下用putty为例: 1.使用putty远程ssh登录192.168.137.100这台主机 2.第一次登录选择"是(Y)",信任该主机,缓存该主机登录信息. 3.登录时,要输入正确的账户和口令,才能正常登录该主机. 下面使用putty和xshell演示如何使用密钥机制远程登录: 一.使用putty密钥认证机制登录 1.打开putty安装目录中的putty key generator软件,点击"Genera

asp.net权限认证:HTTP基本认证

一.HTTP基本认证示意图 HTTP基本认证,即http basic认证. 客户端向服务端发送一个携带基于用户名/密码的认证凭证的请求.认证凭证的格式为“{UserName}:{Password}”,并采用Base64编码,经过编码的认证凭证被存放在请求报头Authorization中,Authorization报头值类似:Basic MTIzNDU2OjEyMzQ1Ng==.服务端接收到请求之后,从Authorization报头中提取凭证并对其进行解码,最后采用提取的用户名和密码实施认证.认证

MCSA&MCP认证证书

2017年1月拿到了微软的第一张证书 Mark一下 再接再厉,拿下MCSE MCSA&MCP认证证书