首页 > 技术文章 > oauthlib-一款通用且完整的实现OAuth请求签名逻辑python库

expressTHK 2020-12-15 17:04 原文

 

OAuth通常看起来很复杂且难以实现。有一些著名的库可以处理OAuth请求,但是它们都具有以下一种或两种特性:

它们早于OAuth 1.0规范AKA RFC 5849。

它们早于OAuth 2.0规范AKA RFC 6749。

他们假定使用特定的HTTP请求库。

OAuthLib是一个框架,可在不假设特定HTTP请求对象或Web框架的情况下实现OAuth1或OAuth2的逻辑。使用它可以将OAuth客户端支持移植到您喜欢的HTTP库上,或将支持移植到您喜欢的Web框架上。如果您是此类库的维护者,请在OAuthLib之上编写一个薄薄的单板并以很少的努力获得OAuth支持。

支持哪些Web框架?

以下软件包使用OAuthLib提供了OAuth支持。

对于Django,有django-oauth-toolkit,其中包括Django REST框架支持。

对于Flask,有flask-oauthlib和Flask-Dance。

对于Pyramid,有pyramid-oauthlib。

对于Bottle有bottle-oauthlib。

如果您编写了支持您喜欢的框架的OAuthLib软件包,请更新文档。

FAQ

1.如何将OAuthlib用作Django,Flask和其他Web框架的提供程序?

提供程序可以在任何Web框架中实现。但是,其中一些库具有立即可用的库来帮助集成:具体参考上方的内容。

对于其他框架,请通过打开GitHub问题或在Gitter OAuthLib社区上进行联系。

2.身份认证和授权有什么区别?

认证

身份验证可验证您的身份。例如,您可以使用ssh客户端登录到Unix服务器,或者使用POP3和SMTP客户端访问电子邮件服务器。通常,PAM(可插拔身份验证模块)用作高级应用程序编程接口(API)中的低级身份验证方案,从而允许依赖于身份验证的程序独立于基础身份验证方案编写。

授权

授权会验证您有权执行的操作。例如,允许您通过ssh客户端登录Unix服务器,但无权访问浏览器/ data2或任何其他文件系统。成功进行身份验证后,将进行授权。可以在文件系统级别或使用各种应用程序级别的配置选项(例如chroot(2))来控制授权。

通常,连接尝试必须由系统进行身份验证和授权。通过这两个因素,您可以轻松找出为什么接受或拒绝连接尝试的原因。

3.简而言之,OAuth 1和2之间的最大区别是什么?

OAuth 2更简单,因为它需要使用TLS,而OAuth 1则需要在没有TLS的情况下安全地工作。要确保没有TLS OAuth 1的安全性,需要对每个请求进行签名,这可能很麻烦。

获取模块

标准安装

标准安装包含OAuthLib的核心功能,可以通过下载源文件手动安装:OAuthLib模块下载

为了降低其要求,标准安装中不包括RSA公钥加密所需的Python软件包。

带有RSA的附加功能

为了支持使用RSA公钥加密的功能,还必须安装PyCA的 加密软件包和PyJWT软件包。这可以通过安装OAuthLib的核心功能以及“ signedtoken”附加功能来完成。

pip install 'oauthlib[signedtoken]'

 

推荐阅读