当前位置: 首页 > news >正文

HTTP Basic 认证

HTTP Basic 认证

难度等级:【初级】

由RFC7617定义的HTTP Basic认证是一种非常基础而简单的认证模式,因此叫他Basic认证。他本质上就是浏览器提供的一个接口,能够根据HTTP返回值,自动弹出一个登录框,让用户输入ID和密码,最后发给服务器校验,如若成功,此后每次请求都会携带这个头部。Basic认证确实省去了许多麻烦事:不需要再手写一个前端登录界面,不需要缓存token塞到请求头,不需要定义复杂的交互接口。对于小型网站来说,Basic认证能够快速实现一个登录模块。

浏览器原生的4种弹框

1.  console.alert('警告!');  // 一段消息、确定键。【1个按钮】

b23e8e02171e4b0d34193da232e53c17.png

2.  console.confirm('确认?'); // 一段消息、确定键、取消键。【2个按钮】

a61be15296e6c25f452ba1f3fb2585f7.png

3.  console.prompt('输入:'); // 一段消息、输入框、确定键、取消键。【1个文本框,2个按钮】

77ea4ace02998eeb87805844822de09b.png

4.  Basic 认证弹窗:一段消息、ID输入框、密码输入框、登录键、取消键。【2个文本框,2个按钮】

bc8bb7c2ae92180e068ae4dce6f0ed6e.png

RFC 7617基本逻辑

228b6d1ca46a872279ea896ed1212349.png

1.  浏览器请求HTTP。

2.  服务器返回401 Unauthorized。

3.  浏览器弹出登录窗口。

4.  用户输入用户名和密码,并确认。

5.  浏览器用Base64编码用户名和密码。

6.  浏览器通过Authorization头部请求HTTP。

7.  服务器验证用户名和密码。

8.  服务器返回200 OK或者401 Unauthorized。

NodeJS代码实现

// HTTP Basic 认证
require('http').on('request', (req, res) => {let auth = req.headers.authorization?.replace('Basic ', '');auth = Buffer.from(auth || '', 'base64').toString('utf-8');if ("username:password" === auth) {res.writeHead(200);res.end('成功');} else {res.writeHead(401, {'WWW-Authenticate': 'Basic realm="inveta"'});res.end('失败');}
});
http://www.lryc.cn/news/191866.html

相关文章:

  • 计算机网络第2章-HTTP和Web协议(2)
  • css3 table表格
  • 【【萌新的SOC学习之AXI DMA环路测试介绍】】
  • 07 | @Entity 之间的关联关系注解如何正确使用?
  • 深入理解AQS之ReentrantLock源码分析
  • 微软宣布延长Azure支持Apache Cassandra 3.11时间到2024年
  • cv_bridge和opencv 记录
  • 关于OWL-carousel插件在ajax调用后需要重新实例化问题(页面无轮播效果)
  • day4作业
  • SSMS中的SQL sever代理
  • 估算总体标准差的极差均值估计法sigma = R/d2
  • JavaScript之正则表达式
  • Spring实战 | Spring AOP核心功能分析之葵花宝典
  • linux之/etc/skel目录
  • 文件介绍---C语言编程
  • 软考 系统架构设计师系列知识点之特定领域软件体系结构DSSA(6)
  • TensorFlow入门(二十三、退化学习率)
  • 登录中获取验证码的节流
  • spring boot 实现Minio分片上传
  • 2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • docker-compose 部署示例
  • 新版WordPress插件短视频去水印小程序源码
  • 如何提高MES系统的落地成功率?
  • private key ssh连接服务器
  • PDF-Word-图片等的互相转换
  • 【VR开发】【Unity】0-课程简介和概述
  • Java面试题-Java核心基础-第三天(基本数据类型)
  • Bean容器里的单例是根据什么识别它是同一个类呢?(比如容器里创建了A类,再去用这个A类的时候,Bean容器怎么知道这个就是A类?)
  • 简述 happens - before 八大规则
  • windows flask 多进程高并发