Web验证方式(1)--Http Basic Authentication
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的更多相关文章
- Web验证方式(2)--Form Authentication
Form验证方式并不是HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式.其大致流程如下: 在上图的流程中,ASP.NET框架提供了如下支持类:( FormsAuthenticat ...
- Web验证方式(3)--OAuth 2.0协议
介绍 OAuth协议是用来解决第三方应用程序访问Http Service的时候的认证问题.举个例子:某视频网站支持用户通过微信登陆,然后获取用户在微信上的图像信息. 在这个场景里 微信充当的就是Htt ...
- Web验证方式(4)--JWT
OAuth协议中说到的AccessToken可以是以下两种: 1.任意只起到标识作用的字符串:这种情况下Resource Server处理请求时需要去找Authorization Server获取用户 ...
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
- Web services 安全 - HTTP Basic Authentication
根据 RFC2617 的规定,HTTP 有两种标准的认证方式,即,BASIC 和 DIGEST.HTTP Basic Authentication 是指客户端必须使用用户名和密码在一个指定的域 (Re ...
- Web API 基于ASP.NET Identity的Basic Authentication
今天给大家分享在Web API下,如何利用ASP.NET Identity实现基本认证(Basic Authentication),在博客园子搜索了一圈Web API的基本认证,基本都是做的Forms ...
- HttpClient 三种 Http Basic Authentication 认证方式,你了解了吗?
Http Basic 简介 HTTP 提供一个用于权限控制和认证的通用框架.最常用的 HTTP 认证方案是 HTTP Basic authentication.Http Basic 认证是一种用来允许 ...
- Web.xml中四种验证方式
源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...
- HTTP Basic Authentication认证(Web API)
当下最流行的Web Api 接口认证方式 HTTP Basic Authentication: http://smalltalllong.iteye.com/blog/912046 什么是HTTP B ...
随机推荐
- Harbor 企业级 Docker Registry
HarBor项目:https://github.com/vmware/harbor 下载:https://github.com/vmware/harbor/releases 安装文档:https:// ...
- 基于OpenCV进行图像拼接原理解析和编码实现(提纲 代码和具体内容在课件中)
一.背景 1.1概念定义 我们这里想要实现的图像拼接,既不是如题图1和2这样的"图片艺术拼接",也不是如图3这样的"显示拼接",而是实现类似"BaiD ...
- 20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础
目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定 ...
- linux内核与分析 心得与体会
作业目录: (1)计算机是如何工作的:http://www.cnblogs.com/20135335hs/p/5213394.html (2)操作系统是如何工作的:http://www.cnblogs ...
- 搭建docker hadoop环境
目录 搭建Docker-Hadoop基础环境 简介 步骤 搭建Docker image ..待续 注释 搭建Docker-Hadoop基础环境 简介 因为很难真正的有一个集群环境.在一般的条件下想要模 ...
- QT+qtablewidget自定义表头【合并单元格】
1.把下列文件放在工程中[已上传到我的文件中] 2.代码 auto *headview = new HHeadViewClass(Qt::Horizontal, ui.tableWidget); he ...
- 线程池ThreadPoolExecutor里面4种拒绝策略
ThreadPoolExecutor类实现了ExecutorService接口和Executor接口,可以设置线程池corePoolSize,最大线程池大小,AliveTime,拒绝策略等.常用构造方 ...
- GetLastError()数字_转换为_文字
1.具体参数 可参看 http://blog.csdn.net/hongweigg/article/details/6821536 或 其它文章 或 MSDN 2.VC6 测试代码: #include ...
- Mac下安装pcl-1.8.0
更新,官方有Homebrew安装教程: http://pointclouds.org/documentation/tutorials/installing_homebrew.php#installin ...
- Hadoop1.2.1完全分布模式安装教程
假设有三台机器,它们的IP地址和对应的主机名为: 192.168.12.18 localhost.localdomain 192.168.2.215 rhel5 ...