requests库入门-15-OAUTH认证
来源:互联网 发布:淘宝生意怎么做大做强 编辑:程序博客网 时间:2024/05/21 14:09
前面一篇文章,我们知道了HTTP中的基本认证机制,我们知道基本认证还是不是很安全,这篇介绍另外一种认证机制,OAUTH认证,现在最新应该是2.0版本。那么什么是Oauth认证呢?其实,我们几乎每天都在使用这个认证登录不同app或者网站。例如,现在csdn网站支持QQ登录和微信登录,这个就使用到了OAUTH认证机制。因为,我们前面一直在拿githua网站举例,这里也不例外,下面这个例子,能够帮助你理解OAUTH认证的过程。
先看看OAUTH整个认证过程图解
1. 支持用github账号登录的网站
打开一个国内网站,https://coding.net/,点击登录,可以看到支持github账号登录。
我用我的github账号,可以看到coding.net给github发送了一个请求,需要请求github上我个人的一些用户数据,点击授权登录,就可以用github账号登录coding.net网站。下面我们为了用python中的requests库来演示这个OAUTH授权登录过程,我们来简化一下,手动在github上设置一个不会变化的token。
2.在github上设置一个token
浏览器登录github网站,点击头像下的setting按钮,进入到设置页面。下拉底部,点击菜单 Developer settings ->Personal access tokens,点击生成一个私人的访问token链接。我们在新页面,随意给一个token描述,例如输入demo,勾选user这个区域,也就是让这些信息可以被OAUTH授权的程序去获取。点击绿色的生成token按钮。
我们把这个token复制下来,先保存到一个记事本里面。
3.Python requests代码实现
import requestsBase_Url = 'https://api.github.com'def build_uri(end_point): return '/'.join([Base_Url, end_point])def oauth_auth(): headers = {'Authorization': 'token 83e4eaf55e1b5afaff0e825695422afb0d41ee1e'} # 获取user/email信息 response = requests.get(build_uri('user/emails'), headers=headers) print(response.status_code) print(response.text) print(response.request.headers)oauth_auth()运行结果:
200[{"email":"anxxxxx@msn.com","primary":true,"verified":true,"visibility":"public"}]{'User-Agent': 'python-requests/2.18.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'token 83e4eaf55e1b5afaff0e825695422afb0d41ee1e'}这个Oauth和HTTP基本认证对比,是不是感觉安全很多。因为整个请求过程下来,没有涉及到用户的密码和用户的账号。服务器只是给了对方一个token code。当前,在实际x项目过程中,这个token是一个变量,这个变量的获取,可能需要登录接口的response内容得到。
4.利用面向对象思维重构代码
我们观察上面代码,是不是有觉得token是一个变量,而我们在程序代码里把这个给写死了。有时候,我们需要把这个token作为一个变量使用,所有,我们需要把上面代码重构一下,方便更好调用。
import requestsfrom requests.auth import AuthBaseBase_Url = 'https://api.github.com'def build_uri(end_point): return '/'.join([Base_Url, end_point])class GithubAuth(AuthBase): def __init__(self, token): self.token = token def __call__(self, r): # 给request 添加headers r.headers['Authorization'] = ' '.join(['token', self.token]) return rdef oauth_request_advance(): auth = GithubAuth('83e4eaf55e1b5afaff0e825695422afb0d41ee1e') # 我们想要替换一个别的token,这样就非常方便 response = requests.get(build_uri('user/emails'), auth=auth) print(response.text)oauth_request_advance()
- requests库入门-15-OAUTH认证
- requests库入门-14-HTTP基本认证
- OAuth认证
- Oauth认证
- OAuth认证
- Oauth认证
- OAUTH认证
- OAUTH认证
- OAuth认证
- OAuth认证
- Requests库入门
- Requests库入门
- Requests库入门
- Requests库的入门
- Requests库入门
- Requests 库入门
- requests库入门-1-安装requests库
- requests入门
- C# GridControl 的使用小结
- 关于高德地图在fragment中出现切换后只有基本地图服务的解决案列
- kmeans代码分析
- 为什么说电路保护器件是电子产品或设备中不可缺少的组成部分?
- Android数据库基础知识——SQLite数据库的使用
- requests库入门-15-OAUTH认证
- Java程序员修炼之道 之 Log
- 使用plsql操作oracle数据库小技巧之保存用户名和密码
- redis作为mybatis的二级缓存,此时二级缓存可以作为高并发缓存吗
- 音频和视频处理
- 2017第11届广西国际社会公共安全产品暨智慧城市产品展览会会刊(参展商名录)
- Android Studio中怎么使用DDMS工具?
- 一步步构建大型网站架构
- 关于Spring中Controller的单元测试