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

  1. 客户端访问一个受http摘要认证保护的资源。

  2. 服务器返回401状态以及nonce等信息,要求客户端进行认证。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41" 
  1. 客户端将以用户名,密码,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" ← 服务器端质询响应信息
  1. 如果认证成功,则返回相应的资源。如果认证失败,则仍返回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

    1. 避免将密码作为明文在网络上传递,相对提高了HTTP认证的安全性。

    2. 当用户为某个realm首次设置密码时,服务器保存的是以用户名,realm,密码为基础计算出的哈希值(ha1),而非密码本身。

    3. 如果qop=auth-int,在计算ha2时,除了包括HTTP方法,URI路径外,还包括请求实体主体,从而防止PUT和POST请求表示被人篡改。

    4. 但是因为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的身份认证方式相关推荐

  1. mysql错误18456_【问题解决】SQL2008 SQL Server身份认证方式登录失败(错误18456)解决方法图解...

    今天同事电脑本地数据库,用SQL Server身份认证登录不了,后来解决了,突然想起自己曾经也遇到过这个问题,所以还是在这里记录下. 问题报错截图如下: 解决方法步骤截图如下: 1.打开本地数据库-- ...

  2. 基于http协议的api接口对于客户端的身份认证方式以及安全措施[转]

    基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid) ...

  3. 几种身份认证方式的分析

    按身份认证的认证形式来分,目前有:用户名/密码认证.智能卡认证.动态口令认证.USB Key认证.生物特征认证等. 用户名/密码是最简单也是最常用的身份认证方法,是基于"what you k ...

  4. 芯盾时代:一种会思考的新一代安全身份认证方式

    喂,有没有想过你在互联网上的"身份证"是什么?更通俗地讲,在互联网中,什么能证明"你是你"? 当我们登录一个银行APP时,是不是只凭"用户名+口令&q ...

  5. 【SQL2014】 SQL Server身份认证方式登录失败(错误18456)

    问题描述: 用MyEclipse创建数据库连接时,显示用户sa登录失败.于是打开SQL Server2014,连接服务器时使用身份认证方式登录失败(错误18456). 解决方法: 1.使用Window ...

  6. Guacamole 配置开启 Radius 身份认证方式

    背景 最近系统要集成 Radius 认证,支持 Radius 身份认证方式. 发现 Apache/guacamole 支持 Radius 认证方式.就搭建了一个 guacamole 环境,学习了一下 ...

  7. oracle用户身份认证,oracle用户身份认证方式

    数据库身份认证 数据库身份认证比较好理解,就是数据库用户口令以加密的方式保存在数据库内部,当用户连接数据库时必须输入用户名和密码,通过数据库认证后才可以登录到数据库.例如,创建一个数据库认证的用户,语 ...

  8. SQLserver2005以身份认证方式登录的一些配置

    安装sqlserver2005后一般是以windows身份认证的形式登录的.不管怎样都要先让服务启动起来:开始->Microsoft SQL Server 2005->配置工具  如下图所 ...

  9. 双因子认证!这4种身份认证方式你都了解吗?

    双因子认证的小科普 前几天公司里忽然出现了一个陌生人,坐在甄梵仁的位子上. 正当我打算和他打个招呼时,他却脱口而出:"贾正经,好久不见!" 这声音不是甄梵仁的吗?他整容了?? 这整 ...

  10. 基于http协议的api接口对于客户端的身份认证方式以及安全措施

    由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服 ...

最新文章

  1. java jsp学习指南_JSP教程–最终指南
  2. C# 去除所有的html标签
  3. 信息检索 python_python-工程数据结构/信息检索和存储
  4. 查看linux 系统 当前使用的网卡
  5. 实现不规则形状的按钮
  6. mysql linux查看配置文件my.cnf位置
  7. java大数据开发是做什么的_3年Java开发转型大数据,如何跳出CRUD舒适区?
  8. lammps教程:单原子应力计算及应力云图绘制方法
  9. 产品经理的私房菜 - 腾讯产品模型 - 学习能力篇
  10. oracle查询同一天生日的,关于date生日判断的问题
  11. 139邮箱注册收费吗,什么VIP的邮箱安全又好用呢
  12. 为全面硬件升级做好准备 鑫谷开元T1全塔机箱评测
  13. Vue官网2文档笔记
  14. jstree 使用API
  15. 【计算机视觉】图片拼接
  16. 产品经理的10大困惑
  17. 华丽大气酷炫光斑特效LOGO展示PR片头模板
  18. 使用“PC定时执行专家”,提高你的工作效率
  19. 基于重要抽样技术的非序贯蒙特卡洛法(Matlab代码实现)
  20. RTK基准站的启动——利用CORS网络获取基站启动坐标

热门文章

  1. json数组转json对象(利用map()函数)
  2. 解决微信开发者工具的不信任问题
  3. 某宝抢购taobaosnap开发与实现
  4. Excel如何将一列数据转为一行?
  5. html怎么设置文字无法复制粘贴,网页文字无法复制粘贴怎么办
  6. Python的5大就业方向,学会一个都是赚
  7. 电机驱动 TMC5160 详解
  8. Arduino笔记实验(初级阶段)—DHT11温湿度传感器
  9. 浅谈PHP语言的优势和劣势
  10. 重邮第八届ACM大赛-决赛题解报告