Http Basic Authentication是HTTP协议中定义的Web系统中的验证方式。参考wiki

主要的实现机制如下:

1. 用户通过浏览器匿名访问web资源。

2. web服务器检测到web资源是需要已验证的用户才能访问。向浏览器返回Response(状态码401)。该response会携带如下Header:

WWW-Authenticate: {authentication schema} realm="{The realm of the resource}"

对于该header的value:

authentication schema是表示资源采用的验证方式,Http Basic Authentication对应的值为Basic

realm是对web资源进行的逻辑划分。以方便对不同分类的资源进行不同的验证方式.这个可自行定义

3. web浏览器收到Response后会弹出对话框来让用户输入用户名及密码。然后重新发送对web资源的请求。并将用户输入的验证信息包含在Authorization头中。

Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l

这里的Basic为验证方式,而后面接着的字符串是将用户输入的用户名和密码以特定格式组合(username:name)得到的字符串进行base64编码后得到的字符串。

4. web服务器收到新的request后会对Authorization头进行解码并验证,如果验证通过则将资源返回。否则返回401

下面通过ASP.NET Core来演示Basic验证的实现:

首先我们假设已经有一个web api(GET http://localhost/api/values),我们需要对它实现Basic验证。

1. 我们添加一个负责验证的Authentication Middleware

public class AuthenticateMiddleware
{
private readonly RequestDelegate _next;
public AuthenticateMiddleware(RequestDelegate next)
{
_next = next;
} public Task InvokeAsync(HttpContext context)
{
if (context == null)
{
throw new System.ArgumentNullException(nameof(context));
} if(!context.Request.Headers.ContainsKey("Authorization")){
context.Response.StatusCode = ;
context.Response.Headers["WWW-Authenticate"] = "Basic realm='My Realm'";
return Task.FromResult<object>(null);
} return _next.Invoke(context);
}
}

2. 将middleware添加到pipeline中

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
} //注册middleware
app.UseMiddleware<AuthenticateMiddleware>();
app.UseHttpsRedirection();
app.UseMvc();
}

这样我们的所有资源就被保护起来了。不过用户输入任何内容均可通过验证^_^。此处仅作为演示

看看效果:

当我们访问资源时,浏览器会提示我们输入用户名和密码。输入后,浏览器再次发送请求。并带上Authorization头:

然后我们就能看到所访问资源的数据了。浏览器会将Authorization的值缓存一段时间(各个浏览器实现不一样),然后在后续的请求中携带。

Basic验证其实是很不安全的,Authorization的值仅仅做了base64编码,但安全度很低,可以直接被反编码。所以Basic验证最好是于https一起使用来保证安全性。

Web验证方式(1)--Http Basic Authentication的更多相关文章

  1. Web验证方式(2)--Form Authentication

    Form验证方式并不是HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式.其大致流程如下: 在上图的流程中,ASP.NET框架提供了如下支持类:( FormsAuthenticat ...

  2. Web验证方式(3)--OAuth 2.0协议

    介绍 OAuth协议是用来解决第三方应用程序访问Http Service的时候的认证问题.举个例子:某视频网站支持用户通过微信登陆,然后获取用户在微信上的图像信息. 在这个场景里 微信充当的就是Htt ...

  3. Web验证方式(4)--JWT

    OAuth协议中说到的AccessToken可以是以下两种: 1.任意只起到标识作用的字符串:这种情况下Resource Server处理请求时需要去找Authorization Server获取用户 ...

  4. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  5. Web services 安全 - HTTP Basic Authentication

    根据 RFC2617 的规定,HTTP 有两种标准的认证方式,即,BASIC 和 DIGEST.HTTP Basic Authentication 是指客户端必须使用用户名和密码在一个指定的域 (Re ...

  6. Web API 基于ASP.NET Identity的Basic Authentication

    今天给大家分享在Web API下,如何利用ASP.NET Identity实现基本认证(Basic Authentication),在博客园子搜索了一圈Web API的基本认证,基本都是做的Forms ...

  7. HttpClient 三种 Http Basic Authentication 认证方式,你了解了吗?

    Http Basic 简介 HTTP 提供一个用于权限控制和认证的通用框架.最常用的 HTTP 认证方案是 HTTP Basic authentication.Http Basic 认证是一种用来允许 ...

  8. Web.xml中四种验证方式

    源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...

  9. HTTP Basic Authentication认证(Web API)

    当下最流行的Web Api 接口认证方式 HTTP Basic Authentication: http://smalltalllong.iteye.com/blog/912046 什么是HTTP B ...

随机推荐

  1. RESTful源码笔记之RESTful Framework的APIview, Viewset总结分析

    0x00  引言 官方文档:http://www.django-rest-framework.org/drf为我们提供强大的通用view的功能,本博客对这些view进行简要的总结分析.首先,我们看一下 ...

  2. linux内核分析第七周-Linux内核如何装载和启动一个可执行程序

    一.可执行文件的创建 可执行文件的创建就是三步:预处理.编译和链接. cd Code vi hello.c #写入最简单的helloworld的c程序 gcc -E -o hello.cpp hell ...

  3. Ubuntu18.04 怎么开热点

    先说明,电脑上要有wifi适配器,而且连接wifi时,不能开热点 我的笔记本是双系统,现在介绍一下我的设置 在设置里打开热点这个应该会吧,但是热点密码不是自己设置的,而是随机生成的,本文重点介绍一下怎 ...

  4. Vim 操作命令不完全汇总

    .命令:"重复上次修改": x命令:删除光标下的字符: u命令:撤销上次修改: dd命令:删除整行: >G命令:增加从当前行到文档末尾处的层级缩进: $命令:把光标移至行尾: ...

  5. Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】

    本文转载自:https://blog.csdn.net/pzh11001/article/details/79683133 大家好,我是 (深度学习硬件DIY总群)(719577294)群主:    ...

  6. IntelliJ IDEA 常用快捷键,maven依赖图,个性化设置,禁用Search Everywhere

    查看idea 中jar关系图 快捷键: Ctrl+/ 用于注释,取消注释 Ctrl+Shift+F 全文搜索 Ctrl+F 单页面查找 Ctrl+Alt+Shift+L  格式化代码 ======== ...

  7. [微信开发] - weixin4j获取网页授权后的code进而获取用户信息

    weixin4j封装好的SnsComponent组件中的方法可以执行该步骤 WeixinUserInfoController : package com.baigehuidi.demo.control ...

  8. Python学习札记(二十五) 函数式编程6 匿名函数

    参考:匿名函数 NOTE 1.Python对匿名函数提供了有限的支持. eg. #!/usr/bin/env python3 def main(): lis = list(map(lambda x: ...

  9. POJ 1730 Perfect Pth Powers(唯一分解定理)

    http://poj.org/problem?id=1730 题意:给出一个n,a=b^p,求出最大p值. 思路: 首先利用唯一分解定理,把n写成若干个素数相乘的形势.接下来对于每个指数求最大公约数, ...

  10. UVa 11248 网络扩容(最大流(需要优化))

    https://vjudge.net/problem/UVA-11248 题意: 给定一个有向网络,每条边均有一个容量.问是否存在一个从点1到点N,流量为C的流.如果不存在,是否可以恰好修改一条弧的容 ...