目录

授权方式简介

1. Basic Authentication

2. OAuth

3. Token Authentication

4. Digest Authentication(重点说一下)

代码实现

1. 基本身份认证

2. 摘要式身份认证

3. OAuth 1 认证

4. OAuth 2 与 OpenID 连接认证

5. 新的身份认证形式

参考


在编写一个脚本的时候,在接口授权这个地方卡住了,平常做过Basic形式的Authorization,这次用次方式并行不通,用Fiddler抓包发现是Digest。和同事的一番努力,查了Auth的几种方式怎么实现的,最终用的还是requests.auth,发现这个真的很简单。

授权方式简介

authentication 一般包含两个步骤,第一步,用户需要安装服务提供的授权证书,或者用户需要使用API服务中已经存储的某个账户,也可以创建一个;第二步,每次发送请求到API服务时需要带上证书,因为RESTful API 是不会记录客户端与服务端的会话,无状态限制。

1. Basic Authentication

将用户名与密码进行Base64转码,但这种转码是可逆的。某些爬虫工具可能会获取这些请求信息,直接获取用户的账号和密码,如果采用HTTPS方式发送请求,每次请求和响应会被SSL加密,爬虫无法获取这些信息。另一个问题,由于API通常不能信任用户使用的客户端,如果用户在多个设备(平板、电脑、手机)中登录了这个API服务,其中一个设备出现安全问题,需要修改密码,那么其他设备也需要重新登录才行。为了解决第二个问题,需要对每个设备给予不同的证书。

2. OAuth

OAuth 是一种授权框架,能够让应用通过HTTP 服务获取有限的访问,访问用户账号信息,例如Facebook, GitHub, DigitalOcean都采用该技术。它可以委托认证服务授权第三方应用访问自己的账号信息。OAuth2 相比OAuth 1,可以在PC端、移动端设备上使用。

3. Token Authentication

JWT( JSON Web Token), 是一种以Base64编码json对象的token,加密,紧凑且自成一体(self-contained),用于在网络中两个节点之间传递信息。
JWT由三个部分组成:
1.Header, 定义加密算法类型、定义类型(JWT)
2.Payload, 定义token携带的主要信息
3.Signature, 创建token的签名

4. Digest Authentication(重点说一下)

认证过程有两次请求-响应交互:第一次为摘要质询,服务器返回WWW-Authenticate消息头,请求终端做消息摘要。第二次交互中,客户端在HTTP请求里带有Authorization消息头,包含摘要信息和其他参数,服务器收到后做客户端鉴权,在鉴权成功后送回响应,并带有Authentication-Info消息头。客户端根据该消息头中的参数进行服务器鉴权。

1.客户端希望取到服务器上的某个资源,向服务器发送Get请求。
2.服务器收到客户端的请求后,发现这个资源需要认证信息,判断请求报文中是否带有Authorization头,如果没有,返回一个401(Unauthorized)给客户端。在这个401的回复中,同时服务器会加入一个WWW-Authenticate的头
3.客户端收到服务器的401(Unauthorized)回复后,使用服务器回复报文中的nonce值,加上username,password, http method, http uri利用MD5(或者服务器指定的其他算法)计算出request-digest,作为repsonse头域的值。并重新发送请求,请求报文中包含Authorization 头
4.服务器收到客户端发来的请求后,根据username,查找出用户的password,用和客户端同样的方法计算出request-digest(response)。然后和收到的request-digest进行对比,如果一致,则验证成功,接受客户端的请求,成功返回结果。并带有Authentication-Info消息头。客户端根据该消息头中的参数进行服务器鉴权。


代码实现

1. 基本身份认证

以 HTTP Basic Auth 发送请求非常简单:

>>>from requests.auth import HTTPBasicAuth
>>>requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
<Response [200]>

2. 摘要式身份认证

另一种非常流行的 HTTP 身份认证形式是摘要式身份认证,Requests 对它的支持也是开箱即可用的:

>>> from requests.auth import HTTPDigestAuth
>>> url = 'http://httpbin.org/digest-auth/auth/user/pass'
>>> requests.get(url, auth=HTTPDigestAuth('user', 'pass'))
<Response [200]>

3. OAuth 1 认证

Oauth 是一种常见的 Web API 认证方式。 requests-oauthlib 库可以让 Requests 用户简单地创建 OAuth 认证的请求:

>>> import requests
>>> from requests_oauthlib import OAuth1
>>> url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
>>> auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
...               'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
>>> requests.get(url, auth=auth)
<Response [200]>

4. OAuth 2 与 OpenID 连接认证

requests-oauthlib 库还可以处理 OAuth 2,OAuth 2 是 OpenID 连接的基础机制。 请查看 requests-oauthlib OAuth2 documentation 文档以了解 OAuth 2 的各种认证管理流程

5. 新的身份认证形式

如果你找不到所需要的身份认证形式的一个良好实现,你也可以自己实现它。Requests 非常易于添加你自己的身份认证形式。
要想自己实现,就从 AuthBase 继承一个子类,并实现 __call__() 方法:

>>> import requests
>>> class MyAuth(requests.auth.AuthBase):
...     def __call__(self, r):
...         # Implement my authentication
...         return r
...
>>> url = 'http://httpbin.org/get'
>>> requests.get(url, auth=MyAuth())
<Response [200]>

参考

看到这儿,碰到的auth基本已经没问题了,至于深入,请参考如下:
Http Digest 认证
4种认证(authentication)或授权(authorization)方式
Python官方文档:
http://docs.python-requests.org/zh_CN/latest/user/authentication.html

python http 身份认证简介相关推荐

  1. kerberos 身份认证 简介

    原理介绍 kerberos主要是用来做网络通信时候的身份认证,最主要的特点就是"复杂".所以在入坑kerberos之前,最好先熟悉一下其原理.这里推荐一些别人写的文章内容来进行简单 ...

  2. php vue jwt 实战,Vue路由之JWT身份认证的实现方法

    一.JWT身份认证简介 JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案,相较于session机制,服务器就不需要保存任何 session 数据了,也就是说,服务器变成无状态了 ...

  3. 企业微信oauth认证_OAuth2身份认证

    OAuth2统一身份认证 简介 Janusec Application Gateway支持如下身份认证: LDAP CAS 2.0 企业微信扫码登录 钉钉扫码登录 飞书扫码登录 并同时作用于管理后台, ...

  4. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

  5. python的requests快速上手、高级用法和身份认证

    https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...

  6. “人生苦短,我用Python“——身份认证攻击

    身份认证攻击 身份认证攻击 简单网络服务认证攻击 FTP暴力破解模块 SSH暴力破解模块 Web暴力破解模块 身份认证攻击 目前最常见的身份认证模式采用的仍然是"用户名+密码"的方 ...

  7. python手势识别隐马尔可夫模型_手势识别身份认证的连续隐马尔可夫模型

    2018 收稿日期 :2017 - 03 - 18 收修改稿日期 :2017 - 04 - 25 基金项目 : 国家自然科学基金项目 (61373126) 资助 ; 中央高校基本科研业务费专项基金 项 ...

  8. 基于Python实现的SKey身份认证协议

    资源下载地址:https://download.csdn.net/download/sheziqiong/85621996 SKey 身份认证协议的代码实现 本项目为课程实验内容,简单模拟了通过S/K ...

  9. Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理

    原 Python+OpenCv实现AI人脸识别身份认证系统(1)--人脸识别原理 置顶 2019年07月02日 08:47:40 不脱发的程序猿 阅读数 1255更多 所属专栏: 人脸识别身份认证系统 ...

最新文章

  1. 没有好看的 Terminal 怎么能够快乐地写代码
  2. Linux学习总结(十七)-shell 基础知识
  3. 3d 强制添加脚本_每日学点---Jenkins执行脚本权限问题
  4. ORACLE的sign函数和DECODE函数
  5. Node+Vue实现对数据的增删改查
  6. MyEclipse内存溢出问题
  7. eclipse 输入卡顿_7个小技巧,解决eclipse卡顿问题
  8. django URL路由基础
  9. 解决前后端交互Long类型精度丢失的问题
  10. 连接上linux上的ip在哪个文件夹,linux – 当IP别名时,操作系统如何确定哪个IP地址将用作出站TCP / IP连接的源?...
  11. Extjs中renderer:function函数用法
  12. 管理数据,应用程序和主机安全-A
  13. 抖音:时间熔炉的诞生
  14. android 修改以太网mac地址_Android5.1修改以太网MAC地址(SElinux)
  15. 用pentbox-1.8在kali中设置蜜罐记录攻击者行为
  16. PPT打印预览无背景
  17. 机器学习初探:(十一)主成分分析
  18. vue项目没有router文件夹_router文件夹
  19. pr使用中C盘空间变小
  20. linux固态硬盘检测,linux 检查硬盘是 SSD or HDD

热门文章

  1. python 字符串拼接_面试官让用 3 种 python 方法实现字符串拼接 ?对不起我有8种……...
  2. 设计模式 — 结构型模式 — 享元模式
  3. 5G 信令流程 — 5GC 的会话管理(SM,Session Management)
  4. 程序编译生成的Hex、Bin、axf和elf格式
  5. FAT16文件系统结构扇区数据分析
  6. js获取微信验证实现微信自动跳转 检验code操作
  7. 基于虚拟帐号的邮件系统(extmail)上
  8. WPF中为Grid增加边框
  9. JDBC PreparedStatement 实现原理【推荐阅读】
  10. 地球椭球体(Ellipsoid)、大地基准面(Datum)及地图投影(Projection)三者的基本概念