帮助开发人员构建实现操作提供程序规范的服务的工具。

globus-action-provider-tools的Python项目详细描述


这是一个实验性的、不受支持的工具包,可以帮助开发人员构建用于globus自动化流的操作提供程序。

由于这是实验性的,因此不支持或提供对该包的任何类型的使用。它的出版是为了便于在那些计划将它用于其预期、实验和目的的人之间分发。

工具包组件

此工具包提供两个主要组件:

  1. 身份验证帮助程序,使验证globus身份验证令牌和确定是否应授权给定请求变得更容易
  2. 一个OpenAPI v3 specification和相关的帮助程序,可用于验证传入请求和验证操作提供程序生成的响应。本文档还定义了rest api必须支持的接口,以使其作为操作提供程序发挥作用。

安装

安装是通过pypi使用的,例如:pip install globus-action-provider-tools

用法

身份验证

身份验证帮助程序可以在操作提供程序中使用,如下所示:

fromglobus_action_provider_tools.authenticationimportTokenChecker# You will need to register a client and scope(s) in Globus Auth# Then initialize a TokenChecker instance for your provider:checker=TokenChecker(client_id='YOUR_CLIENT_ID',client_secret='YOUR_CLIENT_SECRET',expected_scopes=['https://auth.globus.org/scopes/YOUR_SCOPES_HERE'],expected_audience='YOUR_CLIENT_NAME',)

(预期的观众在不久的将来应该是不必要的)

当请求进入时,使用令牌检查器从http授权头验证访问令牌。

access_token=request.headers['Authorization'].replace('Bearer ','')auth_state=checker.check_token(access_token)

authState有几个属性和方法,可以使您更容易地决定是否允许请求继续:

# This user's Globus identities:auth_state.identities# frozenset({'urn:globus:auth:identity:9d437146-f150-42c2-be88-9d625d9e7cf9',#           'urn:globus:auth:identity:c38f015b-8ad9-4004-9160-754b309b5b33',#           'urn:globus:auth:identity:ffb5652b-d418-4849-9b57-556656706970'})# Groups this user is a member of:auth_state.groups# frozenset({'urn:globus:groups:id:606dbaa9-3d57-44b8-a33e-422a9de0c712',#           'urn:globus:groups:id:d2ff42bc-c708-460f-9e9b-b535c3776bdd'})

您会注意到组和标识都被表示为字符串,明确地表示它们所表示的实体类型。这使得在您希望使用包含所有身份验证的单个集的情况下,可以轻松地合并两个集而不发生冲突:

all_principals=auth_state.identities.union(auth_state.groups)

authstate对象还提供了一个helper方法,check_authorization()用于帮助您测试是否应授权请求:

resource_allows=['urn:globus:auth:identity:c38f015b-8ad9-4004-9160-754b309b5b33']auth_state.check_authorization(resource_allows)# True

此方法还接受两个特殊的字符串值'public''all_authenticated_users',以及允许使用它们的关键字参数:

resource_allows=['public']auth_state.check_authorization(resource_allows,allow_public=True)# Trueresource_allows=['all_authenticated_users']auth_state.check_authorization(resource_allows,allow_all_authenticated_users=True)# True

缓存

<>为了避免对Globus AUTs过度征税,默认情况下,{TT4}$将缓存标识和组成员资格30秒。

当您第一次实例化TokenChecker()时,缓存被初始化。您只需要为应用程序创建一个tokenchecker实例,然后就可以重新使用它来检查每个新的令牌。如果尝试创建多个实例,可能会出现异常:

>;dogpile.cache.exception.RegionAlreadyConfigured: This region is already configured

因为它正在尝试重新初始化已设置的缓存。

验证

如上所述,有一个针对操作提供程序api的openapi v3规范。您可以使用任何接受OpenAPIv3的工具来验证对您的服务的请求和响应,但是这个工具包提供了一些使用OpenAPIcore库预先配置的验证器。

fromglobus_action_provider_tools.validationimportrequest_validator,response_validator# Validating a requestresult=request_validator.validate(request)# Or a response:result=response_validator.validate(request,response)# raise errors if invalidresult.raise_for_errors()# or get list of errorserrors=result.errors

请注意,传递给验证器的requestresponse对象必须符合BaseOpenAPI请求和响应接口。如果使用flask,可以使用provided wrappers,但是如果使用不同的web框架,则需要编写自己的小包装类。

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

推荐PyPI第三方库


热门话题
使用jaxrpc的Java eclipse WebService客户端   java编程方式在对象上写入名称   java Spring批处理:重试后跳过   java Android错误:错误:任务执行失败:应用程序:transformClassesWithDexForDebug'   带有清单文件nullPointerException的java Android元数据   spring Java Quartz调度作业停止运行   JavaMockito:如何在不调用实际方法的情况下,模拟带有参数和无效返回类型的静态方法?   java Tomcat连接池问题无法在关闭的连接上调用方法   java如何交换列表中的项目?   java如何停止线程并通过Toast在线程中正确显示文本?   java为什么连续写入OutputStream时偏移量0不会导致重复字节?   java我无法生成头文件   不兼容的返回类型错误java   修改值后键值对的java Jolt转换规范   java有自动更新Javadoc的工具吗?   java线程如何在ints自身实例类中共享变量   java继承一个非gwt模块   java Hibernate xml配置   使用netty4异步调用的java链接HTTP请求响应