本文转自: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)
分类: 权限认证

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

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

    本文转自:http://www.cnblogs.com/lanxiaoke/p/6357501.html 摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密 ...

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

    摘要认证简单介绍 摘要认证是对基本认证的改进,即是用摘要代替账户密码,从而防止明文传输中账户密码的泄露 之前对摘要认证也不是很熟悉,还得感谢圆中的 parry 贡献的博文:ASP.NET Web AP ...

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

    在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...

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

    我们现在大多数转向ASP.NET Core来使用开发的团队,应该都不是从0开始搭建系统,而是老的业务系统已经在运行,ASP.NET Core用来开发新模块.那么解决用户认证的问题,成为我们的第一个拦路 ...

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

    目录 ASP.NET Identity登录原理 什么是Claims-based(基于声明)的认证 ASP.NET 下的 Claims-based认证实现 到底什么是OWIN 问题引入: 为什么要解耦服 ...

  6. ASP.NET身份验证——Windows身份认证

    细说ASP.NET Windows身份认证 上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使 ...

  7. Mysql —— C语言链接mysql数据库,用户 角色 权限(用户根据角色的不同拥有增删改查的权限、用户有三种认证方式)

    db_修改过(用户 角色 权限): 1.新增用户时候id 改为最大id值加一,之前用的select查看出来的记录数加一,删除后再增加会出错: 2.删除用户时候,若该用户创建过其他用户(不能改此用户名. ...

  8. [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证

    很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前请求者是一个经过授权的用户.授权的本质就是让用户在他许可的权限范围内做他能够做的事情,授权的前提是请求者 ...

  9. shiro 方法级别细粒度权限控制_Shiro的认证和权限控制

    从类别上分,有两大类: - 认证:你是谁?–识别用户身份. - 授权:你能做什么?–限制用户使用的功能. 权限的控制级别 从控制级别(模型)上分: - URL级别-粗粒度 - 方法级别-细粒度 - 页 ...

最新文章

  1. 在Eclipse中使用Maven构建Spring项目
  2. pandas高级处理-交叉表与透视表
  3. python中列表数据汇总和平均值_python的列表List求均值和中位数实例
  4. 前后端分离,如何解决跨域(代理模式)、路由拦截(进入页面需要登录)以及请求拦截(登录TOKEN失效)等问题(初学者)
  5. Excel/WPS表格怎么设置输入密码才能打开文件
  6. bzoj 3399: [Usaco2009 Mar]Sand Castle城堡
  7. Windroy Lets Android run on Windows systems-- 国外androids 虚拟系统分享
  8. python assertion failed_python - OpenCV错误:(-215:断言失败)!_src.empty()在函数'cvtColor'中 - 堆栈内存溢出...
  9. mysql 51.数据库下载_Database Master官方下载_MySQL/SQLite数据库管理软件V5.2.51.18513下载(暂未上线)_预约_飞翔下载...
  10. Java 用Myeclipse部署项目基础坏境搭建
  11. java 铁路管理信息系统_基于Java铁路售票系统的设计与实现(含录像)(SqlServer)
  12. VMware Pro 虚拟机+Unlocker v3.0补丁+ MacOs 10.14.4最新版苹果系统懒人版镜像 一键部署 【全部免积分】
  13. @Transactional你知道多少?
  14. 三星手机性能测试软件,5部手机性能测试:红米垫底三星倒数第三 第一当之无愧...
  15. siblings的用法
  16. 【win10系统重装】
  17. 哈佛的计算机视觉医学方向排名,搜狐科学 | 美国医学院十强排名出炉 哈佛大学再次排名榜首...
  18. Spark的conf目录下没有slaves文件,spark3.1.2解压以后conf目录下没有slaves,spark找不到slaves怎么办,解决slaves问题
  19. 五种 Ajax 反模式:避免常见的 Ajax 代码陷阱!
  20. mysql 烂泥行天下_烂泥:mysql数据库使用的基本命令

热门文章

  1. 知识点2-对二进制的运用
  2. [已解决] InnoDB: preallocating bytes for file ./ibdata1 failed with error
  3. MySQL中interactive_timeout和wait_timeout的区别
  4. day10-闭包函数、函数装饰器
  5. 再谈MySQL JSON数据类型
  6. 禁用微信 webview 调整字体大小
  7. redis cluster 添加 删除 重分配 节点
  8. Rafy 框架 - 大批量导入实体
  9. css内边距与外边距的区别
  10. 如何在WIN7上添加磁盘