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

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第三方库


热门话题
Java ScheduleExpression:调度器只在第一个小时工作,为什么?   从Java代码转换时出现Kotlin错误   安卓上条件语句中的java布尔值?   java Wildfly:服务器重新启动后授权失败   java如何从hibernate自动ddl中排除模式   元音的java正则表达式负前瞻   线程中的java异常。我不能执行这个程序   java避免在线程处于特定块中时对静态对象进行全局修改   java布尔方法的行为不符合预期,当预期为true时返回false   java如何删除具有相同对象名的JavaFx标签   安卓W/System。犯错误﹕ JAVA木卫一。FileNotFoundException:访问存储在资产文件夹中的数据库时   gradle中的java条件依赖   Java中的资源、URI、URL、路径和文件有什么区别?   java电子学习平台技术、设计和体系结构