接口测试 requests的身份认证方式
requests提供多种身份认证方式,包括基本身份认证、netrc 认证、摘要式身份认证、OAuth 1 认证、OAuth 2 与 OpenID 连接认证、自定义认证。这些认证方式的应用场景是什么呢?
身份认证的定义
身份认证是使用用户提供的凭证来识别用户。
session会话保存,用来保持会话的状态;
token是对用户进行授权。
身份认证和授权的关系:需要先获取身份信息才能进行授权
身份认证的类型
1、基本身份认证
HTTP Basic Auth是HTTP1.0提出的认证方式
客户端对于每一个realm,通过提供用户名和密码来进行认证的方式
当认证失败时,服务器收到客户端请求,返回401 UNAUTHORIZED,同时在HTTP响应头的WWW-Authenticate域说明认证方式及认证域
# 响应头WWW-Authenticate: Basic realm="***"
requests以 HTTP Basic Auth 发送请求,示例:
事实上,HTTP Basic Auth 如此常见,Requests 就提供了一种简写的使用方式(事实上,很难找到用http基本身份认证方式的网站了):
>>> requests.get('https://api.github.com/user', auth=('user', 'pass'), verify=False)
<Response [200]>
2、netrc 认证
如果认证方法没有收到 auth 参数,Requests 将试图从用户的 netrc 文件中获取 URL 的 hostname 需要的认证身份
如果找到了 hostname 对应的身份,就会以 HTTP Basic Auth 的形式发送请求
简而言之,需要预先将认证的host及用户名、密码以明文方式存在netrc文件中,这种方式也是非常不安全的
3、摘要式身份认证
digest authentication:在HTTP 1.1提出,目的是替代http 1.0提出的基本认证方式
服务器收到客户端请求后返回401 UNAUTHORIZED,同时在WWW-Authenticate字段说明认证方式是Digest,其他信息还有realm域信息、nonce随机字符串、opaque透传字段(客户端会原样返回)等
摘要式身份认证的步骤
参考文章:https://blog.csdn.net/jansony1/article/details/52430577
客户端访问一个受http摘要认证保护的资源。
服务器返回401状态以及nonce等信息,要求客户端进行认证。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
客户端将以用户名,密码,nonce值,HTTP方法, 和被请求的URI为校验值基础而加密(默认为MD5算法)的摘要信息返回给服务器。
认证必须的五个情报:
・ realm : 响应中包含信息
・ nonce : 响应中包含信息
・ username : 用户名
・ digest-uri : 请求的URI
・ response : 以上面四个信息加上密码信息,使用MD5算法得出的字符串。
Authorization: Digest
username="Mufasa", ← 客户端已知信息
realm="testrealm@host.com", ← 服务器端质询响应信息
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", ← 服务器端质询响应信息
uri="/dir/index.html", ← 客户端已知信息
qop=auth, ← 服务器端质询响应信息
nc=00000001, ← 客户端计算出的信息
cnonce="0a4f113b", ← 客户端计算出的客户端nonce
response="6629fae49393a05397450978507c4ef1", ← 最终的摘要信息 ha3
opaque="5ccc069c403ebaf9f0171e9517f40e41" ← 服务器端质询响应信息
如果认证成功,则返回相应的资源。如果认证失败,则仍返回401状态,要求重新进行认证。
注意事项:※ nonce:随机字符串,每次返回401响应的时候都会返回一个不同的nonce。
※ nounce:随机字符串,每个请求都得到一个不同的nounce。
※ MD5(Message Digest algorithm 5,信息摘要算法)
1)用户名:realm:密码 ⇒ ha1
2)HTTP方法:URI ⇒ ha2
3)ha1:nonce:nc:cnonce:qop:ha2 ⇒ ha3避免将密码作为明文在网络上传递,相对提高了HTTP认证的安全性。
当用户为某个realm首次设置密码时,服务器保存的是以用户名,realm,密码为基础计算出的哈希值(ha1),而非密码本身。
如果qop=auth-int,在计算ha2时,除了包括HTTP方法,URI路径外,还包括请求实体主体,从而防止PUT和POST请求表示被人篡改。
但是因为nonce本身可以被用来进行摘要认证,所以也无法确保认证后传递过来的数据的安全性。
requests处理摘要式认证示例
另一种非常流行的 HTTP 身份认证形式是摘要式身份认证,Requests 对它的支持也是开箱即可用的。
可以看到,当认证失败,返回401时,header中包含的信息:
image.png
4、OAuth 1 认证
Oauth 是一种常见的 Web API 认证方式。 requests-oauthlib
库可以让 Requests 用户简单地创建 OAuth 认证的请求。
查看OAuth1的原理,可以查看微博的api:http://open.weibo.com/wiki/index.php/Oauth
要使用OAuth验证,首先需要获取到对应的access_token等信息。
官方示例如下:
OAuth1.png
5、OAuth 2 与 OpenID 连接认证
OAuth2是OAuth1的升级版,requests-oauthlib 库还可以处理 OAuth 2,OAuth 2 是 OpenID 连接的基础机制。
6、requests处理token
每次登录后,返回的token信息都是不同的,因此要再次向服务端传送token信息;
以github接口为例,获得token后,查看用户拥有的权限:
image.png
总结
理解基本认证方式和摘要认证方式的原理
OAuth认证是目前大部分api采用的认证方式
token是在服务器端生成的一个令牌,这个令牌有时间期限和权限,就比如皇宫大内中的不同职责的人员拿着令牌能进入的场所不同
接口测试 requests的身份认证方式相关推荐
- mysql错误18456_【问题解决】SQL2008 SQL Server身份认证方式登录失败(错误18456)解决方法图解...
今天同事电脑本地数据库,用SQL Server身份认证登录不了,后来解决了,突然想起自己曾经也遇到过这个问题,所以还是在这里记录下. 问题报错截图如下: 解决方法步骤截图如下: 1.打开本地数据库-- ...
- 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]
基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid) ...
- 几种身份认证方式的分析
按身份认证的认证形式来分,目前有:用户名/密码认证.智能卡认证.动态口令认证.USB Key认证.生物特征认证等. 用户名/密码是最简单也是最常用的身份认证方法,是基于"what you k ...
- 芯盾时代:一种会思考的新一代安全身份认证方式
喂,有没有想过你在互联网上的"身份证"是什么?更通俗地讲,在互联网中,什么能证明"你是你"? 当我们登录一个银行APP时,是不是只凭"用户名+口令&q ...
- 【SQL2014】 SQL Server身份认证方式登录失败(错误18456)
问题描述: 用MyEclipse创建数据库连接时,显示用户sa登录失败.于是打开SQL Server2014,连接服务器时使用身份认证方式登录失败(错误18456). 解决方法: 1.使用Window ...
- Guacamole 配置开启 Radius 身份认证方式
背景 最近系统要集成 Radius 认证,支持 Radius 身份认证方式. 发现 Apache/guacamole 支持 Radius 认证方式.就搭建了一个 guacamole 环境,学习了一下 ...
- oracle用户身份认证,oracle用户身份认证方式
数据库身份认证 数据库身份认证比较好理解,就是数据库用户口令以加密的方式保存在数据库内部,当用户连接数据库时必须输入用户名和密码,通过数据库认证后才可以登录到数据库.例如,创建一个数据库认证的用户,语 ...
- SQLserver2005以身份认证方式登录的一些配置
安装sqlserver2005后一般是以windows身份认证的形式登录的.不管怎样都要先让服务启动起来:开始->Microsoft SQL Server 2005->配置工具 如下图所 ...
- 双因子认证!这4种身份认证方式你都了解吗?
双因子认证的小科普 前几天公司里忽然出现了一个陌生人,坐在甄梵仁的位子上. 正当我打算和他打个招呼时,他却脱口而出:"贾正经,好久不见!" 这声音不是甄梵仁的吗?他整容了?? 这整 ...
- 基于http协议的api接口对于客户端的身份认证方式以及安全措施
由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服 ...
最新文章
- java jsp学习指南_JSP教程–最终指南
- C# 去除所有的html标签
- 信息检索 python_python-工程数据结构/信息检索和存储
- 查看linux 系统 当前使用的网卡
- 实现不规则形状的按钮
- mysql linux查看配置文件my.cnf位置
- java大数据开发是做什么的_3年Java开发转型大数据,如何跳出CRUD舒适区?
- lammps教程:单原子应力计算及应力云图绘制方法
- 产品经理的私房菜 - 腾讯产品模型 - 学习能力篇
- oracle查询同一天生日的,关于date生日判断的问题
- 139邮箱注册收费吗,什么VIP的邮箱安全又好用呢
- 为全面硬件升级做好准备 鑫谷开元T1全塔机箱评测
- Vue官网2文档笔记
- jstree 使用API
- 【计算机视觉】图片拼接
- 产品经理的10大困惑
- 华丽大气酷炫光斑特效LOGO展示PR片头模板
- 使用“PC定时执行专家”,提高你的工作效率
- 基于重要抽样技术的非序贯蒙特卡洛法(Matlab代码实现)
- RTK基准站的启动——利用CORS网络获取基站启动坐标