[转]asp.net权限认证:HTTP基本认证(http basic)

本文转自:http://www.cnblogs.com/lanxiaoke/p/6353955.html

HTTP基本认证示意图

HTTP基本认证,即http basic认证。

客户端向服务端发送一个携带基于用户名/密码的认证凭证的请求。认证凭证的格式为“{UserName}:{Password}”,并采用Base64编码,经过编码的认证凭证被存放在请求报头Authorization中,Authorization报头值类似:Basic MTIzNDU2OjEyMzQ1Ng==。服务端接收到请求之后,从Authorization报头中提取凭证并对其进行解码,最后采用提取的用户名和密码实施认证。认证成功之后,该请求会得到正常的处理,并回复一个正常的响应。

注:其实basic 的参数传输方式还是一种不错的数据传输加密方式哦,多采用这种前后端数据交互方式的项目颇多,只是一般与https一起使用,这个后边再讲。

新建一个demo

demo很简单,新建一个Attribute:BasicAuthorizeAttribute用于实现basic认证


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public class BasicAuthorizeAttribute : AuthorizeAttribute

{

    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)

    {

        if (actionContext.Request.Method == HttpMethod.Options) return true;

        if (actionContext.Request.Headers.Authorization != null && actionContext.Request.Headers.Authorization.Parameter != null)

        {

            var authorizationParameter = Convert.FromBase64String(actionContext.Request.Headers.Authorization.Parameter);

            var basicArray = Encoding.Default.GetString(authorizationParameter).Split(‘:‘);

            var userid = basicArray[0];

            var password = basicArray[1];

            if (userid == "123456" && password == "123456")

            {

                return true;

            }

        }

        return false;

    }

    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)

    {

        var responseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized);

        responseMessage.Headers.Add("WWW-Authenticate""Basic");

        throw new HttpResponseException(responseMessage);

    }

}


1

1、Convert.FromBase64String这句是解密经过BASE64加密的报文中的Authorization值,然后得到带格式的用户登录数据:{UserName}:{Password}
得到用户userid就可以自定义验证用户合法性了

2、HandleUnauthorizedRequest重写这个方法是为了服务器返回basic认证的格式,即前台弹出的那个登录框,
而BASE64加密及报文传输这不能算是basic认证特有,我们的表单数据传输都可以用这种方式

用法也很简单,在ApiController或方法上边加属性即可,如:


1

2

3

4

5

[BasicAuthorize]

public IEnumerable<string> Get()

{

    return new string[] { "value1""value2" };

}

  

好了,我们来看看允许效果

如期显示,输入用户账户后即可看到访问的资源

 BASE64的加密强度非常低,一般是不会直接用这种方式加密传输数据的

因为base64加密存储在客户端报文中,而且解密非常简单,几乎就相当于明文传输,没有任何自定义key一起加密,所有一般不推荐

如果一定要使用的话,建议使用 base64 + https,下面我们在https环境运行程序。

1、IIS Express属性,启用SSL

开发环境vs启用SSL就是那么简单,呵呵。。

2、再次运行网站,显示正常

3、点击确定

why? 很疑惑是不是?? 不是说https是加密传输的吗,但是Authorization信息貌似还是明文传输。。

呵呵,这个问题我也困惑了好久。

4、我们先看看http与https不同的地方

多了一层SSL,这个SSL层不是体现在网页端,所以我们看到http与https运行后,访问/api/values产生的html编码都是一样的

不一样的地方在于https的传输方式,传输是加密的

除此之外,内容在客户端和服务端都是明文显示的哦,大家要注意了。

5、对于https传输加密的研究,已经超出本章的范围,据我网上了解,https在一定条件下也是可以被抓包的。

但是是加密之后的数据,没有私匙抓包也没有用处。所有可以安全使用

asp.net权限认证系列

  1. asp.net权限认证:Forms认证
  2. asp.net权限认证:HTTP基本认证(http basic)
  3. asp.net权限认证:Windows认证
  4. asp.net权限认证:摘要认证(digest authentication)
  5. asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
  6. asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
  7. asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
  8. asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)

分类: 权限认证

时间: 2024-10-06 22:53:23

[转]asp.net权限认证:HTTP基本认证(http basic)的相关文章

asp.net权限认证:摘要认证(digest authentication)

asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证:摘要认证(digest authentication) 一.摘要认证由来 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密码的泄露 之前对摘要认证也不是很熟悉,还得感谢圆中的 parry 贡献的博文:ASP.NET Web API(三):安全验证之使用摘要认证(dige

asp.net权限认证篇外:集成域账号登录

在之前的我们已经讲过asp.net权限认证:Windows认证,现在我们来讲讲域账号登录, 这不是同一件事哦,windows认证更多的是对资源访问的一种权限管控,而域账号登录更多的是针对用户登录的认证,他一般与forms认证结合一起使用 demo就用之前的asp.net权限认证:Forms认证 1.改一下LoginController,如下 1 public class LoginController : Controller 2 { 3 public ActionResult Index()

[转]asp.net权限认证:摘要认证(digest authentication)

本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html 摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密码的泄露 之前对摘要认证也不是很熟悉,还得感谢圆中的 parry 贡献的博文:ASP.NET Web API(三):安全验证之使用摘要认证(digest authentication) 我是觉得真心不错,让我少走很多弯路.这篇文章主要是对上边引用文章的讲解,老司机可以略过. 老规矩,上摘认证的工作流

asp.net权限认证:Forms认证

摘要: 明天就除夕了,闲着也是闲着,特地总结一些关于.net下的权限认证的方法. 一.Forms认证示意图 Forms认证即是表单认证,需提供身份id和密码password的进行认证和授权管理. 应该是大家比较熟悉的一种,刚接触.net可能都会学学这个东西. 下面看看他的工作方式: 二.看图太乏味,我准备了一个demo 因为默认首页为:IndexController/Index,这个页面只要一行字 “Index”, 效果图: OK,页面没有做任何权限控制,显示正常. 接下来看看DefaultCo

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

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

MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细介绍什么是Claims-based认证,它与传统认证方式的区别,以及它的特点.同时我们还会介绍OWIN (Open Web Interface for .NET) 它主要定义了Web Server 和Web Application之间的一些行为,然后实现这两个组件的解耦(当然远不止这么点东西,我相信

asp.net core 2.0的认证和授权

在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理,本文内容,更适合传统行业的BS应用,而非互联网应用. 在asp.net core中,我们认证(Authentication)通常是在Login的Post Action中进行用户名或密码来验证用户是否正确,如果通过验证,即该用户就会获得一个或几个特定的角色,通过ClaimTypes.Role来存储角色

ASP.NET Core集成现有系统认证

我们现在大多数转向ASP.NET Core来使用开发的团队,应该都不是从0开始搭建系统,而是老的业务系统已经在运行,ASP.NET Core用来开发新模块.那么解决用户认证的问题,成为我们的第一个拦路虎.本文将给大家简单阐述一下认证与授权的基本概念,以及基于ASP.NET Core 中间件实现的认证和改造JwtBearer 认证中间件来实现的认证达到与老系统(主要是token-based认证)的集成. 目录 认证与授权 什么是认证 何谓授权 用Middleware拦截 定制JWT Bearer 

七天学会ASP.NET MVC (四)——用户授权认证问题

小编应各位的要求,快马加鞭,马不停蹄的最终:七天学会 Asp.Net MVC 第四篇出炉.在第四天的学习中.我们主要了学习怎样在MVC中怎样实现认证授权等问题.本节主要讲了验证错误时的错误值,client验证,授权认证及登录注销功能的实现. 系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)--ASP.Net MVC 数据处理 七天学会ASP.NET