HTTP 常见的用户认证可以分为下面三种:

  • 基于IP,子网的访问控制(ACL)
  • 基本用户验证(Basic Authentication)
  • 消息摘要式身份验证(Digest Authentication)

一.基本身份验证(Basic Authentication)

原理:
一个页面访问请求

GET /auth/basic/ HTTP/1.1
Host: target

Web服务器要求用书输入用户凭据(服务器返回401响应头和’realm’)

HTTP/1.1 401 Authorization Required
Date: Sat, 08 Jun 2013 12:52:40 GMT
WWW-Authenticate: Basic realm="Basic auth Dir"
Content-Length: 401
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

浏览器弹出登录窗口(包含’realm’),要求用提供用户名/密码

GET /auth/basic/ HTTP/1.1
Host: target
Authorization: Basic TGVuZ1dhOjEyMzQ1Ng== //Basic后面就是LengWa:123456经过Base64编码后的字符串

服务器将用户输入的凭据和服务器端的凭据进行比较。

二.消息摘要式身份验证(Digest Authentication)

原理:

Digest Authentication在基本身份验证上面扩展了安全性. 服务器为每一连接生成一个唯一的随机数, 客户端对用这个随机数对密码进行MD5加密. 然后发送到服务器. 服务器端也用此随机数对密码加密, 然后和客户端传送过来的加密数据进行比较.

一个页面访问请求

GET /auth/basic/ HTTP/1.1
Host: target

Web服务器要求用书输入用户凭据(服务器返回401响应头和’realm’)

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="Digest Encrypt",
domain="www.domain.com",
nonce="nmeEHKLeBAA=aa6ac7ab3cae8f1b73b04e1e3048179777a174b3",
opaque="0000000000000000",
stale=false,
algorithm=MD5,
qop="auth"

浏览器弹出登录窗口(包含’realm’), 要求用提供用户名/密码

GET /auth/digest/ HTTP/1.1
Accept:text/html
Authorization: Digest username="LengWa",
realm="Digest Encrypt",
qop="auth",
algorithm="MD5",
uri="/auth/digest/",
nonce="nmeEHKLeBAA=aa6ac7ab3cae8f1b73b04e1e3048179777a174b3",
nc=00000001,
cnonce="6092d3a53e37bb44b3a6e0159974108b",
opaque="0000000000000000",
response="652b2f336aeb085d8dd9d887848c3314"

服务器将用户输入加密后的凭据和服务器端加密后的的凭据进行比较.如果一致则返回所请求页面的响应.

总结:
Basic验证方式配置相对简单,但是安全性太低,不适合一些加密要求比较高的站点。
Digest则相反,加密性是很高,但是实现起来还是有一点难度的,所以根据自己需要,选择不同的加密方式。

HTTP 用户认证的更多相关文章

  1. Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

    用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...

  2. Django--自定义用户认证

    Django自带的用户认证 以前都是用Django自带的用户认证,用户名字段一对一关系对应Django--User表(其实它也是继承了abstractbaseuser). 1 2 3 from dja ...

  3. linux(十二)___Apache服务器用户认证、虚拟主机的配置

    创建xiangkejin  zhangsan两个用户 可看见文件中创建的两个用户: 建立虚拟目录并配置用户认证 ①建立虚拟目录 /xiangkejin ②在Apache的主配置文件httpd.conf ...

  4. [django]用户认证中只允许登陆用户访问(网页安全问题)

    当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [    url(r'^$', 'login ...

  5. 使用JDBC实现Oracle用户认证

    两天时间写的小品,以前的J2EE环境基本使用框架.现在使用JDBC配合Oracle存储过程模拟了一下用户注册和用户认证. 一.添加必须的jar包 需要JDBC连接Oracle的包和shiro-core ...

  6. ldap实现用户认证

    LDAP的用户认证类. public class LDAPHelper { private DirectoryEntry _objDirectoryEntry; /// <summary> ...

  7. auth用户认证库

    关于auth库,建议如下:1. ion_auth,基于Redux重写而成,非常不错的认证库,国外用的很多,几个最新的ci2.0.2基础上的开源系统(如doveforum)都用它,支持ci 2.0和以上 ...

  8. 禅道PMS兼容redmine用户认证接口

    项目地址:https://github.com/web3d/zentao-redmine-userauth zentao-redmine-userauth 做了一个基本的用户认证接口,兼容redmin ...

  9. 使用Autodesk OAuth服务在用户认证的示例

    大家知道以Autodesk 360为核心的Autodesk 云服务已经陆续发布,ReCap API.InfraWorks API和PLM 360 REST API已经开始的Pilot项目供第三方开发者 ...

  10. Spring Security笔记:使用数据库进行用户认证(form login using database)

    在前一节,学习了如何自定义登录页,但是用户名.密码仍然是配置在xml中的,这样显然太非主流,本节将学习如何把用户名/密码/角色存储在db中,通过db来实现用户认证 一.项目结构 与前面的示例相比,因为 ...

随机推荐

  1. AS3.0 效率优化

    1.显示对象:1.1.静态的不需互动的图形,使用Shape对象.(eg:getSize(newShape())=236) 1.2.不需要时间轴的互动图形,使用Sprite对象.(eg:getSize( ...

  2. Android 花钱 划动手指每天一元钱

    花钱(英文ColorMoney)是由上海花动传媒开发的一款免费的应用程序,现支持Android操作系统.安装花钱app后,用户将获得全新的手机锁屏背景图,其中包含各种有趣.唯美的壁纸类图片,亦包含应用 ...

  3. WebSocket 是什么原理?为什么可以实现持久连接?(转载)

    本文转载自知乎,来源如下: 作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有.商业转载请联 ...

  4. iOS:iOS中的几种动画

    本文来自收藏,感谢原创博主. iOS中的动画 摘要 本文主要介绍核iOS中的动画:核心动画Core Animation, UIView动画, Block动画, UIImageView的帧动画. 核心动 ...

  5. 把文章里边的html标签去掉(去掉文字的样式,显示css设置的样式)

    java: validHeasers.add(tr[0].replace("<(.[^>]*)>",""));//去除HTML标签

  6. 心路历程——毕设程序mr跑不通的问题

    这个bug改了实在是太多天了,前前后后折腾了太久,最后多谢@CC学长的帮助,找到了问题,才终于跑通了!!!这里记录一下这个bug我前后改的过程,引以为戒! 毕设中需要进行mapreduce进行数据清洗 ...

  7. <c:forEach items="${revertList}" varStatus="reverts" var="revert" > <dl >

    <c:forEach>标签用于通用数据循环,它有以下属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 begin 开始条件 否 0 end 结束条件 否 集合中的 ...

  8. UIActivityViewController实现系统原生分享

    代码地址如下:http://www.demodashi.com/demo/11042.html 一.效果预览 二.接下来介绍UIActivityViewController,跟我动手做 1.创建要分享 ...

  9. Node.js开发入门—HelloWorld再分析

    在Node.js开发入门(1)我们用http模块实现了一个简单的HelloWorld站点,这次我们再来细致分析下代码.了解很多其它的细节. 先看看http版本号的HelloWorld代码: 代码就是这 ...

  10. Ansible远程执行脚本示例

    首先创建一个shell脚本 cat /tmp/df.sh #!/bin/bash df -h|grep vda|awk '{print $5}' 然后把该脚本分发到各个机器上 ansible comp ...