Qt http 的认证方式以及简单实现
http 的认证方式
- 基本认证(Basic Authentication):
- 基本认证是最简单的HTTP认证方式。客户端在请求头中使用Base64编码的用户名和密码进行身份验证
- 由于仅使用Base64编码,基本认证并不安全,因此建议与HTTPS一起使用,以加密传输
具体详细讲解:https://www.cnblogs.com/xy-ouyang/p/12600055.html
https://datatracker.ietf.org/doc/html/rfc7617
- 摘要认证(Digest Authentication):
- 摘要认证是比基本认证更安全的一种方式。它通过在服务器和客户端之间交换摘要值来进行身份验证。
- 客户端发送请求后,服务器返回一个随机值(称为nonce),客户端使用用户名、密码、nonce和其他信息计算出一个哈希值,然后将其发送到服务器进行验证。
- 摘要认证提供了更好的保护,防止密码在传输过程中被窃取,但仍然需要注意保护nonce的安全性。
具体详细讲解:https://datatracker.ietf.org/doc/html/rfc7616
- Bearer Token认证:
- Bearer Token认证是一种常用于OAuth 2.0和单点登录(SSO)系统的方式。客户端在请求头中发送一个令牌(token)来进行身份验证。
- 令牌通常在登录后由服务器分发,客户端需要将令牌存储起来,然后在每次请求中发送给服务器进行验证。
- Bearer Token认证可以是无状态的,但也需要保护令牌的安全性,避免泄露。
具体详细讲解: https://datatracker.ietf.org/doc/html/rfc6750#section-3
- 客户端证书认证:
- 客户端证书认证是一种高度安全的方式,客户端在请求中使用证书进行身份验证。
- 客户端需要事先获取一个证书,服务器会验证该证书的有效性和授权。
- 这种方式适用于需要高级别的安全性保护的场景,如金融、医疗等领域。
代码实现方式:
项目中使用的几种实现方式:
- 基本认证(Basic Authentication):
std::tuple<QByteArray, QString, int> Http::Post(const QString &url, const QByteArray &array_data)
{qDebug()<<array_data<<url;QNetworkReply *Net_Reply;QNetworkAccessManager Net_Manage;QNetworkRequest Net_Request;QSslConfiguration conf = Net_Request.sslConfiguration();//"Basic dGVzdDoxMjPCow==" == "Basic" + " " + base64("用户名:密码")Net_Request.setRawHeader("Authorization","Basic dGVzdDoxMjPCow==");Net_Request.setUrl(url);QEventLoop Loop;Net_Reply = Net_Manage.post(Net_Request,array_data);connect(Net_Reply,SIGNAL(finished()),&Loop,SLOT(quit()));connect(Net_Reply,SIGNAL(error(QNetworkReply::NetworkError)),&Loop,SLOT(quit()));Loop.exec();QByteArray array = Net_Reply->readAll();qDebug()<<array;qDebug()<<Net_Reply->errorString();Net_Reply->deleteLater();return std::make_tuple(array,Net_Reply->errorString(),int(Net_Reply->error()));
}
- 摘要认证(Digest Authentication):
std::tuple<QByteArray, QString, int> Http::Post(const QString &url, const QByteArray &body_data)
{qDebug()<<array_data<<url;QNetworkReply *Net_Reply;QNetworkAccessManager Net_Manage;QNetworkRequest Net_Request;// "Digest XXXXX" == "Digest" + " " + "加密内容"// 具体看双方协商怎末对内容加密// 可能: 客户端生成 nonce 随机数, 以及服务端返会的slat// key = MD5(nonce + slat)// content = hamc(body_data, key) Net_Request.setRawHeader("Authorization","Digest content");Net_Request.setRawHeader("nonce","XXXXXXXXXXXX")Net_Request.setUrl(url);QEventLoop Loop;Net_Reply = Net_Manage.post(Net_Request,body_data);connect(Net_Reply,SIGNAL(finished()),&Loop,SLOT(quit()));connect(Net_Reply,SIGNAL(error(QNetworkReply::NetworkError)),&Loop,SLOT(quit()));Loop.exec();QByteArray array = Net_Reply->readAll();qDebug()<<array;qDebug()<<Net_Reply->errorString();Net_Reply->deleteLater();return std::make_tuple(array,Net_Reply->errorString(),int(Net_Reply->error()));
}
- Bearer Token认证:
std::tuple<QByteArray, QString, int> Http::Post(const QString &url, const QByteArray &array_data)
{qDebug()<<array_data<<url;QNetworkReply *Net_Reply;QNetworkAccessManager Net_Manage;QNetworkRequest Net_Request;// "Bearer mF_9.B5f-4.1JqM" == "Bearer" + " " + Token// 具体看实际需求,有可能鉴权既有token 也有 摘要Net_Request.setRawHeader("Authorization","Bearer mF_9.B5f-4.1JqM");Net_Request.setUrl(url);QEventLoop Loop;Net_Reply = Net_Manage.post(Net_Request,array_data);connect(Net_Reply,SIGNAL(finished()),&Loop,SLOT(quit()));connect(Net_Reply,SIGNAL(error(QNetworkReply::NetworkError)),&Loop,SLOT(quit()));Loop.exec();QByteArray array = Net_Reply->readAll();qDebug()<<array;qDebug()<<Net_Reply->errorString();Net_Reply->deleteLater();return std::make_tuple(array,Net_Reply->errorString(),int(Net_Reply->error()));
}
WWW-Authenticate 和 Authenticate 的介绍
`WWW-Authenticate` 和 `Authenticate` 是两个与HTTP认证相关的HTTP头部字段,用于客户端和服务器之间交换身份验证信息。它们的区别在于使用的上下文和位置。
两者区别:
-
WWW-Authenticate
:-
WWW-Authenticate
是服务器在HTTP响应中使用的头部字段。当客户端请求受保护的资源但未提供有效的身份验证信息时,服务器会返回一个"401 Unauthorized"响应,并在响应头中添加WWW-Authenticate
字段,以提示客户端进行合适的身份验证。 -
服务器使用
WWW-Authenticate
来指示客户端应该使用哪种认证方式(如基本认证、摘要认证等)来验证其身份。
-
-
Authenticate
:Authenticate
是客户端在HTTP请求中使用的头部字段。客户端在请求中包含Authenticate
字段来提供身份验证凭据,以验证其身份并请求访问受保护的资源。- 这是客户端在发起身份验证请求时使用的字段,通常与请求中的身份验证方式(如基本认证、Bearer Token等)一起发送。
使用场景:
-
WWW-Authenticate
在服务器响应中使用,通常是在用户尝试访问受保护资源时,服务器要求客户端进行身份验证的情况下。客户端会根据这个头部字段指示的认证方式提供相应的凭据。 -
Authenticate
在客户端请求中使用,当客户端向服务器发送请求时,它可能会在请求头中包含Authenticate
字段,以根据服务器的要求提供相应的身份验证凭据。
总结来说,WWW-Authenticate
是服务器告知客户端应该如何进行身份验证的方式,而 Authenticate
是客户端在请求中提供身份验证凭据的方式。它们一起协同工作,确保通信双方能够进行有效的身份验证并访问受保护的资源。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Qt http 的认证方式以及简单实现
http 的认证方式 基本认证(Basic Authentication): 基本认证是最简单的HTTP认证方式。客户端在请求头中使用Base64编码的用户名和密码进行身份验证由于仅使用Base64编码,基本认证并不安全,因此建议与HTTPS一起使用,以…...
![](https://img-blog.csdnimg.cn/4c14934fa6d6459497dc547c07995999.png)
【图像分割】实现snake模型的活动轮廓模型以进行图像分割研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
![](https://img-blog.csdnimg.cn/img_convert/24c840a370bed4916b7fafbffa5faad1.webp?x-oss-process=image/format,png)
【MongoDB系列】1.MongoDB 6.x 在 Windows 和 Linux 下的安装教程(详细)
本文主要介绍 MongoDB 最新版本 6.x 在Windows 和 Linux 操作系统下的安装方式,和过去 4.x 、5.x 有些许不同之处,供大家参考。 Windows 安装 进入官网下载 Mongodb 安装包,点此跳转,网站会自动检测当前操作系统提供最新的版本&…...
![](https://7078909xxh.oss-cn-shanghai.aliyuncs.com/csdn图床专用区/202308151303865.png)
5.网络原理之初识
文章目录 1.网络发展史1.1独立模式1.2网络互连1.3局域网LAN1.3.1基于网线直连1.3.2基于集线器组建1.3.3基于交换机组建1.3.4基于交换机和路由器组建1.3.4.1路由器和交换机区别 1.4广域网WAN 2.网络通信基础2.1IP地址2.2端口号2.3认识协议2.4五元组2.5 协议分层2.5.1 分层的作用…...
![](https://img-blog.csdnimg.cn/ee3df4ff1e384209868d441d079075a9.png)
【Linux】进程状态|僵尸进程|孤儿进程
前言 本文继续深入讲解进程内容——进程状态。 一个进程包含有多种状态,有运行状态,阻塞状态,挂起状态,僵尸状态,死亡状态等等,其中,阻塞状态还包含深度睡眠和浅度睡眠状态。 个人主页ÿ…...
![](https://img-blog.csdnimg.cn/c29fedd16e77474f9d30c91068709cf1.jpeg)
ASEMI快恢复二极管APT80DQ60BG特点应用
编辑-Z APT80DQ60BG参数描述: 型号:APT80DQ60BG 最大峰值反向电压(VRRM):600V 最大直流阻断电压VR(DC):600V 平均整流正向电流(IF):80A 非重复峰值浪涌电流(IFSM):600A 工作接点温度和储存温度(TJ, …...
![](https://img-blog.csdnimg.cn/14ca0f01aa7f4c609e4cd561e4a4cb2a.png)
【Python爬虫】使用代理ip进行网站爬取
前言 使用代理IP进行网站爬取可以有效地隐藏你的真实IP地址,让网站难以追踪你的访问行为。本文将介绍Python如何使用代理IP进行网站爬取的实现,包括代理IP的获取、代理IP的验证、以及如何把代理IP应用到爬虫代码中。 1. 使用代理IP的好处 在进行网站爬…...
![](https://img-blog.csdnimg.cn/4cba1cdb9778424c92c4c747bba818c1.png#pic_center)
识别图片中的文字
前言 PearOCR 是一款免费无限制网页版文字识别工具。 优点如下: 免费:完全免费,没有任何次数、大小限制,可以无限使用; 安全:全部数据本地运算,所有图片均不会被上传; 智能…...
![](https://img-blog.csdnimg.cn/0e4251f50c014ea8a0180f0c69d7c7e2.png)
第七章:借阅管理【基于Servlet+JSP的图书管理系统】
借阅管理 1. 借书卡 1.1 查询借书卡 借书卡在正常的CRUD操作的基础上,我们还需要注意一些特殊的情况。查询信息的时候。如果是管理员则可以查询所有的信息,如果是普通用户则只能查看自己的信息。这块的控制在登录的用户信息 然后就是在Dao中处理的时候需…...
![](https://img-blog.csdnimg.cn/610a7cdf1ec34295805241713716e07e.png)
算法 for GAMES
栈 #include <iostream> #include <stack>int main() {std::stack<int> intStack;// 压入元素到堆栈intStack.push(5);intStack.push(10);intStack.push(15);// 查看堆栈顶部元素std::cout << "Top element: " << intStack.top() <…...
![](https://img-blog.csdnimg.cn/0b8094281dee496fb5804b6d6d636fd1.png)
自研分布式IM-HubuIM RFC草案
HubuIM RFC草案 消息协议设计 基本协议 评估标准 【性能】协议传输效率,尽可能降低端到端的延迟,延迟高于200ms用户侧就会有所感知 【兼容】既要向前兼容也要向后兼容 【存储】减少消息包的大小,降低空间占用率,一个字节在亿…...
![](https://img-blog.csdnimg.cn/0c0e510a86714e6eb4bf4129f98f8c87.png)
tableau基础学习1:数据源与绘图
文章目录 读取数据常用绘图方法1. 柱状图2. 饼图3. 散点图4. 热力图 第一部分是一些较容易上手的内容,以及比较常见的可视化内容,包括:柱状图、饼图、散点图与热力图 读取数据 打开界面后,选择数据源之后就可以导入数据…...
![](https://www.ngui.cc/images/no-images.jpg)
探索经典算法问题与解决方案
探索经典算法问题与解决方案 在计算机科学领域,有许多经典算法问题需要我们思考和解决。本文将深入介绍一些著名的经典算法问题,包括旅行商问题、背包问题的变种、N皇后问题、钢条切割问题、最大子数组和问题、最长公共子串问题以及矩阵连乘问题&#x…...
![](https://img-blog.csdnimg.cn/16e416f1a0994a9fa42c0f742820695f.png)
【Linux】DNS系统,ICMP协议,NAPT技术
遏制自己内心的知识优越感,才能让你发自内心的去尊重他人,避免狂妄自大,才能让你不断的丰富自己的内心。 文章目录 一、DNS系统1.DNS服务器返回域名对应的ip2.使用dig工具分析DNS过程3.浏览器中输入url后发生的事情? 二、ICMP协议…...
![](https://img-blog.csdnimg.cn/img_convert/1143fcb4c5170262d668d0212aaea1d1.webp?x-oss-process=image/format,png)
BI技巧丨Window应用之同环比
白茶曾介绍过OFFSET可以用来解决同环比的问题,其实微软最近推出的开窗函数WINDOW也可以用来解决同环比。 WINDOW函数基础语法 WINDOW ( from[, from_type], to[, to_type][, <relation>][, <orderBy>][, <blanks>][, <partitionBy>][, &l…...
![](https://img-blog.csdnimg.cn/ffe68a45f4a24675b858fefc541c728e.png)
【Mac】编译Spring 源码和Idea导入
今天我们开始Spring源码的阅读之旅。阅读Spring的源码的第一步当然是编译Spring源码。首先我们要去GitHub上将spring源码给clone下来。 笔者编译环境如下: Spring版本:5.28 https://github.com/spring-projects/spring-framework/tree/v5.2.8.RELEASE …...
![](https://img-blog.csdnimg.cn/229cfe889f124e1d9b6b9db6ee14331e.png#pic_center)
手把手教你用 ANSYS workbench
ANSYS Workbench ANSYS Workbench是一款基于有限元分析(FEA)的工程仿真软件。其基本概念包括: 工作区(Workspace):工程仿真模块都在此区域内,包括几何建模、网格划分、边界条件设置、分析求解等…...
![](https://img-blog.csdnimg.cn/8eb58e44c8f14385906e286b09dd9b1a.png)
Kotlin开发笔记:协程基础
Kotlin开发笔记:协程基础 导语 本章内容与书的第十五章相关,主要介绍与协程相关的知识。总的来说,本文将会介绍Kotlin中关于异步编程的内容,主要就是与协程有关。在Kotlin中协程是利用continuations数据结构构建的,用…...
![](https://www.ngui.cc/images/no-images.jpg)
自学设计模式(简单工厂模式、工厂模式、抽象工厂模式)
使用工厂模式来生产某类对象(代码简化且容易维护,类之间有血缘关系,可以通过工厂类进行生产); 简单工厂模式(用于创建简单对象) 对于简单工厂模式,需要的工厂类只有一个࿱…...
![](https://www.ngui.cc/images/no-images.jpg)
NFS:使⽤ NFS 为远程客户端提供共享文件系统
写在前面 分享一些 nfs 搭建的笔记考试顺便整理内容涉及 nfs 服务端客户端的搭建配置理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的&…...
![](https://www.ngui.cc/images/no-images.jpg)
2022-kaggle-nlp赛事:Feedback Prize - English Language Learning(超多注释讲解)
2022-kaggle-nlp赛事:Feedback Prize - English Language Learning 零、比赛介绍 比赛地址Feedback Prize - English Language Learning | Kaggle 0.1 比赛目标 写作是一项基本技能。可惜很少学生能够磨练,因为学校很少布置写作任务。学习英语作为第…...
![](https://img-blog.csdnimg.cn/8a6e9c1188934ae098dadc7d06d5cfc1.png)
第十三课 宾语从句
文章目录 前言一、宾语从句1、主语及物动词宾语从句2、主语双宾动词间接宾语直接宾语3、主语特定及物动词宾语从句(作宾语)宾补4、主语be某些形容词宾语从句5、动词不定式后面的宾语从句6、动名词后面的宾语从句7、介词后面的宾语从句9、间接引语 前言 一…...
![](https://img-blog.csdnimg.cn/af21713b969d41abbf61e457f94a99d2.png)
Docker容器与虚拟化技术:GitHub账户注册
目录 一、实验 1.GitHub 一、实验 1.GitHub (1)GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。 (2)官网 GitHub: Let’s build from here …...
![](https://img-blog.csdnimg.cn/1df200cbc20041e984dc7abc20afbc64.png)
thinkphp安装workman
需要加版本,版本太高了不行 composer require topthink/think-worker1.0.*...
![](https://www.ngui.cc/images/no-images.jpg)
L1-036 A乘以B(Python实现) 测试点全过
题目 看我没骗你吧 —— 这是一道你可以在 10 秒内完成的题:给定两个绝对值不超过 100 的整数 A 和 B,输出 A 乘以 B 的值。 输入格式 输入在第一行给出两个整数 A 和 B ( − 100 ≤ A , B ≤ 100 ) A 和 B(−100≤…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录第五十三天
代码随想录第五十三天 Leetcode 1143. 最长公共子序列Leetcode 1035. 不相交的线Leetcode 53. 最大子数组和 Leetcode 1143. 最长公共子序列 题目链接: 最长公共子序列 自己的思路:没想出来!!! 正确思路:首先这道题由于是涉及到了两个数组&…...
![](https://www.ngui.cc/images/no-images.jpg)
cmd - 如何在不重启的情况下让修改后的hosts生效
cmd - 如何在不重启的情况下让修改后的hosts生效 亲测有效 一般在修改了hosts文件后,需要重启电脑才能生效;其实可以不通过重启电脑也可以令其生效,方法如下: 打开cmd窗口输入ipconfig /flushdns,然后回车。…...
![](https://www.ngui.cc/images/no-images.jpg)
echarts实现双x轴并且分组滚动效果
var myChart echarts.init(document.getElementById(allOutPut1));var option {legend: {itemHeight: 10, // 图例icon高度itemWidth: 16, // 图例icon宽度icon:rect,//设置为矩形top:2%,right:10%,},tooltip: {trigger: axis,axisPointer: {type: shadow},textStyle: {fontS…...
![](https://img-blog.csdnimg.cn/a3f0a95b71c244788eb3834752a28bb8.png)
UE4 地形编辑基础知识 学习笔记
之前自己写过这样的功能,今天看到一个UE现成的 点击地形,选择样条 按住CTRL键点击屏幕中某一个点会在场景内生成一个这样的图标 再点两次,会生成B样条的绿线条 点击号再选择一个模型,会生成对应的链条状的mesh 拉高最远处的一个图…...
![](https://img-blog.csdnimg.cn/img_convert/3b6b89dbd94c2204f392b2c361bb384e.gif#pic_center)
AcWing算法提高课-5.5.2最大公约数
宣传一下 算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 题目描述 给定整数 N N N,求 1 ≤ x , y ≤ N 1 \le x,y \le N 1≤x,y≤N 且 gcd ( x , y ) \gcd(x,y) gcd(x,y) 为素数的数对 ( x , y ) (x,y) (x,y) 有多少对。 输入格式 输…...
![](/images/no-images.jpg)
wordpress自适应画廊/点击宝seo
SpringClod之服务保护框架HystrixHystrix服务保护概念服务雪崩效应服务降级服务熔断服务隔离Hystrix环境搭建fallback接口Hystrix Hystrix是Netflix开源的高可用框架,能够完美解决分布式系统架构中高可用服务的问题 断路器服务降级服务熔断服务隔离机制服务雪崩效应 Hystrix具…...
![](/images/no-images.jpg)
中国建设银行网站首页企业网银/查淘宝关键词排名软件有哪些
刚刚研究了Kmeans。Kmeans是一种十分简单的聚类算法。可是他十分依赖于用户最初给定的k值。它无法发现随意形状和大小的簇。最适合于发现球状簇。他的时间复杂度为O(tkn)。kmeans算法有两个核心点:计算距离的公式&推断迭代停止的条件。一般距採用欧式距离等能够…...
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
宠物食品 中企动力提供网站建设/武汉seo优化公司
邮件服器软件种类繁多,但大都离不开SMTP(简单邮件传输协议),本文就从SMTP协议入手讲解如何检测一般性邮件故障。所以这里不必考虑你用的是EXCHANGE还是IMAIL等等。常见可能故障:1.对方邮箱爆满,附件超过对方…...
![](/images/no-images.jpg)
网站建设代理网站/网站建设公司开发
本节介绍Tokyo Tyrant的服务器程序。 三. 服务器程序 1) ttserver 命令ttserver运行服务器端管理一个数据库实例。因为数据库被视为Tokyo Cabinet的抽象API,你可以在服务器启动时选择方案。支持的方案有on-memory hash database, on-memory tree database, hash da…...
![](https://img-blog.csdnimg.cn/img_convert/be29696b2c4c4fbc008b60580781b7f6.png)
网站路径怎么做/做推广哪个平台效果好
一、分类 中国速冻食品根据产品种类可大致分为速冻调制食品(可细分为速冻鱼糜制品、速冻肉制品两类)、速冻面米制品、速冻其他食品三类。其中,速冻面米制品主要包括速冻水饺、汤圆、包子、油条、芝麻球等,是速冻食品中市场规模最…...
![](/images/no-images.jpg)
网站引进搜索引擎怎么做/运营推广渠道有哪些
你只需要知道有什么 库 然后阅读文档 写出自己的东西 不要模仿别人 转载于:https://www.cnblogs.com/Cheetos/p/5385847.html...