OAuth客户机适应于使用Auth0

alf-auth0的Python项目详细描述


ALF-认证0 ==

https://travis-ci.org/globocom/alf.svg?branch=master

python oauth 2客户端

alf是基于requests.Session的oauth 2客户机 对Client Credentials Flow的无缝支持。

/assets/alf.jpeg?raw=true

功能

  • 自动令牌检索和续订
  • 令牌过期控制
  • 自动令牌存储
  • 自动重试状态401(未授权)
  • 使用auth0客户端凭据流

用法

初始化客户端并将其用作requests.Session 对象。

fromalf.clientimportClientalf=Client(token_endpoint='http://example.com/token',client_id='client-id',client_secret='secret')resource_uri='http://example.com/resource'alf.put(resource_uri,data='{"name": "alf"}',headers={'Content-Type':'application/json'})alf.get(resource_uri)alf.delete(resource_uri)

使用自定义令牌存储

现在传递带有get和set属性的对象,您可以存储或检索令牌。

此对象可以是redis、memcache或自定义对象。

fromalf.clientimportClientfromredisimportStrictRedisredis=StrictRedis(host='localhost',port=6379,db=0)alf=Client(token_endpoint='http://example.com/token',client_id='client-id',client_secret='secret',token_storage=redis)resource_uri='http://example.com/resource'alf.put(resource_uri,data='{"name": "alf"}',headers={'Content-Type':'application/json'})alf.get(resource_uri)alf.delete(resource_uri)

将alf与auth0一起使用

要使客户端使用auth0,需要使用 audiencetoken_default_expire_in

调用身份验证终结点时,auth0不返回expires_in。因此你应该 将token_default_expire_in设置为与 已在auth0管理控制台>;api>;<;您的api名称>;>;设置>;中设置。 令牌过期(秒)字段

Audience应设置为auth0中的api标识符。

fromalf.clientimportClientalf=Client(token_endpoint='http://example.com/token',audience='http://api.example.com/my-api/',token_default_expire_in=86400client_id='client-id',client_secret='secret')resource_uri='http://example.com/resource'

它是如何工作的?

在请求之前,将在身份验证终结点上请求令牌 带有access_tokenexpires_in键的json响应将是 预期。

如果出现以下情况,则在端点的错误响应之后将发出多次尝试 使用了token_retries参数。查看token-retrying了解更多信息。

alf根据^{tt3}保存令牌直到它过期$ 价值。

令牌将用于 最初的请求。

GET /resource/1 HTTP/1.1
Host: example.com
Authorization: Bearer token-12312

如果请求以401(未授权)状态失败,则检索新令牌 从终结点重试请求。只有一次,如果 再次失败返回错误响应。

令牌将对以下每个请求重复使用,直到它过期。

令牌重试

客户端支持retry interface from urllib3来重复尝试 从终结点检索令牌。

当响应状态为 是500,每次出错后它将再等待0.3秒(称为 backoff)。

fromrequests.packages.urllib3.utilimportRetryfromalf.clientimportClientalf=Client(token_endpoint='http://example.com/token',client_id='client-id',client_secret='secret',token_retry=Retry(total=5,status_forcelist=[500],backoff_factor=0.3))

工作流程

/assets/workflow.png?raw=true

故障排除

如果检索令牌时出错,将返回错误响应, 真正的要求不会发生。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么加载个人密钥库需要这么多时间?   当我使用main创建Android应用程序UI时,如何通过java修改它。xml文件?   java Tomcat 6和7:WebappClassLoader:尝试为名称org/apache/openjpa/persistence/osgi/BundleUtils复制类定义   java`parseInt()`和`parseDouble()`throw`NumberFormatExeption`   JavaSpringMongoDB填充引用   在LinuxMint中打开Eclipse时发生java错误;OpenJDK 64位服务器VM警告:忽略选项MaxPermSize=512m;支持在8.0中被删除   使用PKCS7Padding的AES CBC加密在Java和Objective中有不同的结果   java为什么Jackson要用一个以类命名的额外层来包装我的对象?   json在Java中使用parallelStream提取值   JavaSpring存储库自动生成方法:按给定的顶部编号+按字段描述排序选择   java是否有可序列化的标准闭包接口?   .NET与Java在初创公司的web应用程序开发   如何修复java。java中的lang.unsatifiedLinkError   JavaFX+Spring Boot+Hibernate应用程序对多个环境的java支持   自定义视图组中的java更改未呈现