Web验证方式--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 = 401;
      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一起使用来保证安全性。

原文地址:https://www.cnblogs.com/Code-life/p/9191367.html

时间: 2024-08-25 22:34:55

Web验证方式--Http Basic Authentication的相关文章

Web验证方式--Form Authentication

Form验证方式并不是HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式.其大致流程如下: 在上图的流程中,ASP.NET框架提供了如下支持类:( FormsAuthentication, FormsAuthenticationModule ) 在上面流程图中的第三步中,我们对用户名密码进行验证后. -可以创建FormAuthenticationTicket对象,将用户数据存入其中. -然后调用FormAuthentication类的工具方法Encrypt得到加过密的tick

Web services 安全 - HTTP Basic Authentication

根据 RFC2617 的规定,HTTP 有两种标准的认证方式,即,BASIC 和 DIGEST.HTTP Basic Authentication 是指客户端必须使用用户名和密码在一个指定的域 (Realm) 中获取认证. 正如"HTTP Basic Authentication"这个名字,它是 Authentication( 认证 ) 中最简单的方法.长期以来,这种认证方法被广泛的使用.当你通过 HTTP 协议去访问一个使用 Basic Authentication 保护的资源时,服

Web验证方式--OAuth 2.0协议(1)

介绍 OAuth协议是用来解决第三方应用程序访问Http Service的时候的认证问题.举个例子:某视频网站支持用户通过微信登陆,然后获取用户在微信上的图像信息. 在这个场景里 微信充当的就是Http Service角色. 视频网站就是第三方应用 而视频网站从微信获取用户图像时,微信需要进行认证就是这里的认证问题 用户在微信上登陆后,产生的在视频网站中访问用户微信上的图像时所需的认证信息,就是OAuth解决认证问题的方式 名词定义 OAuth协议中定义了如下角色: Resource Owner

HTTP Basic Authentication认证(Web API)

当下最流行的Web Api 接口认证方式 HTTP Basic Authentication: http://smalltalllong.iteye.com/blog/912046 什么是HTTP Basic Authentication?直接看http://en.wikipedia.org/wiki/Basic_authentication_scheme吧

事无巨细-全方位跟踪配置Exchange ActvieSync使用证书验证方式

前两段话为费话,请节约时间的人绕行. 工作中需要用到Exchange ActiveSync证书认证的方式,问了同事们没有一个会做,公司的ActiveSync也只是用到了Basic authentication, 而且都是由国外的同事维护的.没办法只好自己来了,可是不料在国内网站上只找到一些很少的片断,不全面也不系统,对于我这样的小白来说,看了之后只会越来越糊涂.在微软的官网上倒是很全面,但是被分成了多个主题,每个功能和配置点都有很多种情况,对于自己想要做的却很难挑出针对性的内容,微软的这种帮助文

当ASP.NET Forms验证方式遭遇苹果IOS

一.问题出现 我在用ASP.NET MVC4做微信开发的时候,用Forms验证方式做为authentication. 一般都是在web.config加: <authentication mode="Forms" > <forms loginUrl="~/Account/Login" name="webcookies" slidingExpiration="true" timeout="30"

Web API 基于ASP.NET Identity的Basic Authentication

今天给大家分享在Web API下,如何利用ASP.NET Identity实现基本认证(Basic Authentication),在博客园子搜索了一圈Web API的基本认证,基本都是做的Forms认证,很少有Claims认证(声明式认证),而我们在用ASP.NET Identity实现登录,认证,授权的时候采用的是Claims认证. 在Web API2.0中认证接口为IAuthenticationFilter,我们只需实现该接口就行.创建BasicAuthenticationAttribut

侠梦说pinpoint-增加web认证Basic Authentication

前言 最近,许多小伙伴吐槽pinpoint-web没有登录认证的问题,隐约记得在web的properties文件中有一个passoword配置,检查后发现这个配置是用于,带admin接口的接口认证用的. 还被官方打上了FIXME,这是要"裸奔"的节奏啊. 思路 首先还是看官网,着急使用的话还是不要重复造轮子了,说不准已经有现成的解决思路了.找来找去我也只发现了这个: 其中的一个Commiter明确指出pinpoint不提供认证,需要自己实现. 好吧,那我们就来自己造个轮子把. 改造过程

使用AFNetWorking 实现以Basic Authentication方式获取access-token

由于服务器端对于调用API获取数据接口进行了限制,需要在调用API之前获取一个access-token,所以需要在iOS里实现获取这个access-token的功能. 服务器端是在ASP.NET中基于Owin OAuth使用Client Credentials Grand方式发放Token,具体的实现细节可以参考这篇博客. 根据服务端提供的测试代码,如下: private async Task GetAccessToken(string grantType, string userName =