[转] 用WWW-Authenticate实现登录验证

2023-05-16

用WWW-Authenticate实现登录验证

文章来源:http://www.keakon.cn/bbs/thread-1989-1-1.html
今天在研究HTTP协议时发现一个叫WWW-Authenticate的头字段,可以用于实现登录验证。它是在 RFC 2617中定义的。

用法很简单,将状态码设为401,在响应头中加上这个字段即可:
引用:
WWW-Authenticate: Basic realm="testrealm@keakon.cn"
浏览器接收到这个响应后,就会弹出这样的对话框:
用WWW-Authenticate实现登录验证 - keakon的blog -

然后用户输入用户名和密码,点确定进行登录。
此时用户名和密码会以冒号:分隔,并进行base64编码,在请求头中以Authorization字段发出:
引用:
Authorization: Basic base64编码过的登录信息
服务器只要获取Authorization字段,按base64解码,再以冒号区分用户名和密码,即可验证是否正确了。由于用户名一般不允许包含冒号,所以即使密码中输入了冒号也没关系。

一个简单的实现如下:
The py code:
普通浏览 复制代码 打印代码 关于程序
  1. def get(self):   
  2.     authorization = self.request.headers.get('Authorization''')   
  3.     if authorization and authorization[:6] == 'Basic ':   
  4.         user, password = b64decode(authorization[6:]).split(':'1)   
  5.         if user == 'admin' and password == 'fuckgfw':   
  6.             self.echo('hello, ' + user)   
  7.             return  
  8.   
  9.     self.set_status(401)   
  10.     self.header['WWW-Authenticate'] = 'Basic realm="testrealm@keakon.cn"'  

def get(self):
	authorization = self.request.headers.get('Authorization', '')
	if authorization and authorization[:6] == 'Basic ':
		user, password = b64decode(authorization[6:]).split(':', 1)
		if user == 'admin' and password == 'fuckgfw':
			self.echo('hello, ' + user)
			return

	self.set_status(401)
	self.header['WWW-Authenticate'] = 'Basic realm="testrealm@keakon.cn"'  

当然,如果你直接这么实现的话,你的用户就惨了。因为HTTP协议是不安全的,任何窃听者都能获取Authorization字段,然后就能很轻易地获取密码了,所以这种简单的实现只能用于HTTPS。

为了确保用户的密码不被窃取,用户的登录信息应该被加密。而实际上并不需要完整的登录信息,只要一个可用于验证的摘要即可,于是服务器可以指定浏览器生成一个Digest。
所需的参数很多,有服务器生成的每次均唯一的字符串、用户请求的URI、请求序列号等。浏览器根据这些参数,与用户名、密码的MD5值用冒号组合起来,再求一次MD5,作为整个的摘要。
这样就非常安全了,只是对服务器负担较大,因为要生成一个随机字符串,还得记录请求序列号等。
好在有些库已经提供了这些功能,所以可以直接使用现成的。
转自: http://www.keakon.cn/bbs/thread-1989-1-1.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[转] 用WWW-Authenticate实现登录验证 的相关文章

  • Cmakelists配置多级目录的gtest项目(项目代码和测试代码分离)

    cmake一些语法定义 之前的博客主要写了怎么配置gtest项目 xff0c 但是一般项目代码和测试代码并不在一起 xff0c 所以尝试将代码分离 主要分成三个部分 xff0c 下面给出demo的分级目录 gtest demo CMakel
  • WGS-84 ECEF ENU 坐标系学习记录

    地球坐标系固定在地球上而随地球一起在空间做公转和自转运动 xff0c 因此地球上任一固定点在地球坐标系的坐标就不会由于地球旋转而变化 地心地固直角坐标系和大地坐标系都属于这种坐标系 一 几种坐标系 地心地固直角坐标系 xff08 ECEF
  • 关于大学生计算机未来发展的个人规划

    本人今年大二 xff0c 计算机专业 xff0c 和很多大学生一样 xff0c 在大一期间仍保持着高中的习惯 xff0c 每天只是上课听讲 xff0c 课后写作业 xff0c 复习与预习 可以说 xff0c 除了课堂上老师讲的知识和书本上有
  • 关于scanf的一些注意事项

    第一点 xff0c 设定的接受变量应以地址的方式出现在scanf内 xff0c 这是因为scanf本身是一个函数 xff0c 若不加地址相当于值传递 xff0c 无法改变对应变量的值 如 xff1a 规定输入类型是整形 xff08 d xf
  • 关于长度未知,输入几组数据之后如何终止输入

    首先 xff0c 应确定结束标准 xff0c 一般题目中会给出以输入 xffe5 或者负数之类的结束 xff0c 若题中没给 xff0c 正常情况下我们自己编码是习惯以回车作为结束符号 故可以用getchar xff08 xff09 接受一
  • 关于TortoiseGit的个人见解

    首先先放一个下载链接 xff1a Download TortoiseGit Windows Shell Interface to Git TortoiseGit是一个用于用户本身和gitee之间进行文件传输的中介 xff0c 本质上是用来简
  • c语言实现扫雷

    实现在9乘9的格子内实现扫雷游戏 xff0c 可修改格子的大小和雷的个数 思路 xff1a 初始利用随机数种子生成10个雷的位置 xff0c 通过输入x xff0c y坐标来显示当前格子是否是雷 xff0c 若是雷游戏结束 xff0c 显示
  • 使用Gstreamer拉取rtsp流,使用jeston硬件加速解码,并保存buffer为图片。

    编译 xff1a g 43 43 demo666 cc o demo666 span class token variable span class token variable 96 span pkg config cflags libs
  • 矩阵键盘驱动代码

    此代码仅提供了代码思路 xff0c 具体移植应用可以私信博主 key c include 34 stm32f10x h 34 include 34 key h 34 include 34 led h 34 include 34 sys h
  • 对于vs份文件编写代码的一些个人见解

    先说明一下为何要将代码写在不同的文件中 xff0c 这对于初学者来说可能是多此一举的 xff0c 因为明明在一个文件中就能完成的事 xff0c 为何要在多个文件中分别写 xff0c 繁琐还容易出错 先让我们明确一个观点 xff0c 就是一个
  • 不产生新变量的情况下交换整数

    思路 xff1a 利用其中一个变量同时存储两个变量的信息 xff0c 而后利用某些运算使得可以在知道其中一个的情况下求出另外一个 具体代码如下 xff1a void exchange1 int ex1 int ex2 ex1 61 ex2
  • 如何求一个数二进制1的个数

    思路 xff1a 方法1 xff1a 可以先求二进制的样式 xff0c 再计算其中1的个数 求二进制就是不断对2除和取余 xff0c 余数组成二进制 xff0c 除的结果做下次对2除和取余 xff0c 直到数字为0 方法2 xff1a 可以
  • BLE5.0蓝牙通信原理及TI BLE协议栈在CC2642上的应用

    蓝牙可以分为经典蓝牙和低功耗蓝牙 xff0c 本文重点介绍低功耗蓝牙 xff08 BLE 一 BLE协议栈结构 以TI的CC26XX芯片为例 xff0c BLE协议栈可以由如下图所示部分组成 xff1a 1 物理层 xff1a 物理层是BL
  • RS232/RS485/CAN_BUS 通信原理总结与通信波形分析

    分析一 xff1a 232串口信号 要点 xff1a RS232 xff0c 全双工 xff0c 采用三线制传输分别为TXD RXD GND xff0c 其中TXD为发送信号 xff0c RXD为接收信号 在RS232中任何一条信号线的电压
  • SVN 拉取分支(Branch/tag)和SVN合并(Merge)

    合并 xff08 Merge xff09 例子 xff1a 把对feature branch project name v3 3 7 branch的修改合并到develop 步骤1 xff1a 如图 xff0c 右键目标文件夹 xff0c
  • 宏#define的三种基本定义方式:固定值,表达式,运算符。

    define xff1a define是C语言中的预处理命令 xff0c 预处理命令以 开头 xff0c 比如我们经常写的代码 include lt stdio h gt 也是预处理命令 define用于宏定义 xff0c 作用是方便程序段
  • 四旋翼飞行器的姿态解算小知识点

    1 惯性测量单元IMU InertialMeasurement Unit 姿态航向参考系统AHRS Attitude and Heading Reference System 地磁角速度重力MARG Magnetic Angular Rat
  • 四元数姿态解算中的地磁计融合解读

    笔者最近在做四轴 xff0c 涉及到地磁计的融合算法 xff0c 网上大多数是x IMU的融合代码 xff0c 但是这段代码对于地磁计的融合说明没有做过多的解释 xff0c 网上没有相关讨论 xff0c 仅在阿莫论坛看到一篇相关的代码解释
  • C++封装静态链接库及使用

    一 为什么要把程序封装成库 有时我们需要把自己的程序交给第三方调用 xff0c 但是又不想被别人看到自己的具体实现代码 xff0c 就封装成库给别人使用 库有动态链接库和静态链接库 xff0c 区别是动态链接库可以在程序运行时动态链接 xf
  • 四元数姿态的梯度下降法推导和解读

    笔者前面几篇文章讨论的是基于四元数的互补滤波算法 xff0c 并单独对地磁计融合部分做了详细的讨论和解释 而本文讨论的姿态融合算法叫做梯度下降法 xff0c 这部分代码可以参见Sebastian O H Madgwick在2010年4月发表

随机推荐

  • 四轴加速度计滤波

    加速度计滤波实验参数 xff1a 采样频率Fs 61 250Hz 截止频率Cutoff Frequency 未开电机静止 开电机悬停 未开电机转动飞控 原始输出 Raw 260 Hz 260Hz 260Hz MPU6050内部 LPF 94
  • Kalman论文笔记

    笔者前段时间阅读了一些关于Kalman的姿态论文 xff0c 本想把Kalman的知识点也整理出来发布 xff0c 无奈这编辑器不给力 xff0c 太多的公式无法复制粘贴 xff0c 图片格式上传的太复杂 xff0c 就放弃了 因此笔者只发
  • uCOS-III学习笔记

    前一段时间笔者学习uCOS III xff0c 第一次接触OS这个概念吧 下面把个人的学习笔记分享出来 xff0c 仅供参考 1 前后台系统 xff1a 后台程序是一个死循环 xff0c 也称为 任务级 xff0c 前台程序则是中断服务程序
  • 3.17 开发一个插件

    打开动态链接库 void dlopen const char filename int flag 返回一个操作句柄void Handle 61 dlopen libct so RTLD LAZY RTLD LAZY xff1a 解析动态库遇
  • 5.7 属性声明

    5 7 属性声明 主要用途 使用 attribute 来声明变量 函数的特殊属性 指导编译器来进行特定方面的优化或代码检查 使用方法 在声明后面添加 xff1a attribute ATTRIBUTE 例 xff1a int global
  • 8.18 模块设计原则:高内聚低耦合

    8 18 模块设计原则 xff1a 高内聚低耦合 模块内聚 定义 xff08 软考 xff09 块内联系 xff1a 模块内各元素的关联 交互程度 从功能角度 xff1a 自己的功能自己实现 xff0c 不麻烦其它模块 如何实现高内聚 功能
  • 9.12 中断(下):中断函数的编写

    9 12 中断 下 xff1a 中断函数的编写 中断特性 可随时打断正在执行的任务 可在任何地方打断正在执行的任务 中断返回后 xff0c CPU不一定重新执行被打断的任务 中断函数 调用时间不固定 xff1a 中断要自己保护现场 调用地点
  • 9.16 内存、外存与外设

    9 16 内存 外存与外设 按速度排列 寄存 缓存 内存 外存 存储分类 内存 又称主存 xff1a CPU能直接寻址的存储空间 存取速度快 包括 xff1a RAM ROM cache等 外存 又称辅存 xff1a 除CPU缓存和内存以外
  • 载波相位测量原理

    1 重建载波 定义 xff1a 载波调制了电文之后变成了非连续的波 xff0c 将非连续的载波信号恢复成连续的载波信号 码相关法 xff1a 方法 将所接收到的调制信号 xff08 卫星信号 xff09 与接收机产生的复制码相乘 技术要点
  • wpa_suplicant 详解 文章收集

    wpa suplicant 详解 文章收集 参考资料 https w1 fi wpa supplicant devel index html https zhuanlan zhihu com p 24246712 https www cnb
  • 玩转AOSP源码编译

    整理搬运一下大佬的文章 https www bilibili com video BV19f4y1r7E6 http liuwangshu cn batcoder aosp 3 compiling aosp html 1 前言 1 1 re
  • Qt 64位链接 mysql8.0 中出现的问题及其解决办法

    1 driver not loaded 原因总结 MinGW编译器中找不到 MySql驱动或者驱动位数不对MinGW编译器找不到 MySql动态库或者动态库有问题代码写的有问题 https blog csdn net l0p0c artic
  • Linux man 手册中各种括号的含义

    尖括号 lt gt 一般用于表示必选项或者参数的占位符 xff0c 实际使用时需要替换成具体的值 方括号 一般用于表示可选项或者参数的占位符 xff0c 实际使用时可以选择是否包含该选项或者参数 大括号 一般用于表示一组选项或者参数 xff
  • 批量创建 markdown 文件的脚本

    写一个 dos脚本 xff0c 其功能是创建 36 个 以 34 Linux内核编程 ch11 sec 34 为开头的 Markdown格式的文件 64 echo off chcp 65001 setlocal enabledelayede
  • libcurl库的http get和http post使用

    一 libcurl中的http get使用方法 1 为什么要使用libcurl 1 作为http的客户端 xff0c 可以直接用socket连接服务器 xff0c 然后对到的数据进行http解析 xff0c 但要分析协议头 xff0c 实现
  • Postman查看完整的请求报文

    第一步 工具栏 View gt Show postman console 第二步 点击 Show Postman Console 之后 就会弹出一个如下图所示的界面 小窍门 postman可以把请求的参数生成代码 可以在代码使用 仅仅只需点
  • 通用异步接收器/发送器(UART)——发送与接收

    图1 带数据总线的UART UART代表通用异步接收器 发送器 它不是像SPI和I2C这样的通信协议 xff0c 而是微控制器中的物理电路或独立的IC UART的主要目的是发送和接收串行数据 关于UART最好的一点是其仅使用两条线在设备之间
  • MYSQL导入数据出现Error 1290:The MySQL server is running with the --secure-file-priv option so it cannot ex

    最近在学习MySQL xff0c 刚入门 xff0c 在导入数据的时候出现了Error 1290 xff1a The MySQL server is running with the secure file priv option so i
  • openmv--无人机通过mavlink实现apriltag定点降落

    span class token comment 无人机通过mavlink实现apriltag定点降落例程 span span class token comment span span class token comment 这个脚本使用
  • [转] 用WWW-Authenticate实现登录验证

    用WWW Authenticate实现登录验证 文章来源 xff1a http www keakon cn bbs thread 1989 1 1 html 今天在研究HTTP协议时发现一个叫WWW Authenticate的头字段 xff