将 Zapier 自定义请求 Webhook 与 JSON Web 令牌结合使用

2024-03-31

我需要访问使用 JSON Web 令牌作为身份验证方法的 API。有没有一种好方法可以使用 python 代码步骤创建此令牌,然后将该令牌作为标头添加到自定义请求 Webhook 步骤中?


我使用 API 进行身份验证的经验是使用简单的API key https://zapier.com/engineering/apikey-oauth-jwt/方法。因此,我第一次读到你的问题并没有完全理解。我决定做一些研究,希望能从中学到一些东西,我确实做到了。我在下面分享我的发现和答案:

首先,我开始阅读 JSON Web Tokens(JWT),这将我引向JWT https://jwt.io/introduction/网站,这是一个很好的资源。它非常清楚地说明了构成 JWT 的组件以及它们需要如何格式化,我强烈建议您查看一下。

从 JWT 网站我发现 JWT 由三个组件组成:

  1. Base64 URL 安全编码标头。
  2. Base64 URL 安全编码的有效负载。
  3. Base64 URL 安全编码签名。

上述所有三个组合形成了格式正确的 JWT。幸运的是,JWT 网站有一个为 Python 制作的库列表。不幸的是,这些第三方库在 Zapier 代码模块提供的普通 Python 中都不可用。要完成此任务需要阅读一些源代码 https://github.com/latchset/jwcrypto/tree/master/jwcrypto并利用我们现有的库。因此,经过几个小时和大量的试验和错误,我能够想出以下解决方案来生成格式正确的 JWT:

import hashlib
import hmac
import requests
from base64 import urlsafe_b64encode

def base64url_encode(payload):
  if not isinstance(payload, bytes):
    payload = payload.encode('utf-8')
  encode = urlsafe_b64encode(payload)
  return encode.decode('utf-8').rstrip('=')

def generate_JWT(header, payload, secret):

  encoded_header = base64url_encode(header)
  encoded_payload = base64url_encode(payload)

  signature = hmac.new(secret,
                      encoded_header + "." + encoded_payload, 
                      hashlib.sha256)
  encoded_signature = base64url_encode(signature.digest())

  return encoded_header + "." + encoded_payload + "." + encoded_signature

def get_request(url, jwt):

  headers = {
    "Authorization" : "Bearer " + jwt
  }

  result = requests.get(url, headers=headers)
  return result

secret = "yoursecrettoken"
header = '{"alg":"HS256","typ":"JWT"}'
payload = '{"sub":"1234567890","name":"John Doe","iat":1516239022}'
jwt = generate_JWT(header, payload, secret)

response = get_request("https://SomeApiEndpoint.com/api/", jwt)

您可以针对 JWT 的调试器测试其输出here https://jwt.io/.

Note:为了使标头和有效负载对象的编码正常工作,您必须将它们转换为字符串对象。我尝试通过调用 JSON.dumps() 函数并传递字典对象来执行此操作,但是当我对返回值进行编码时,它们与 JWT 调试器上显示的内容不匹配。我能找到的唯一解决方案是将字典对象放在引号中并确保其中没有空格。

因此,有了 JWT,您就可以在 Zapier Webhooks 自定义获取请求步骤中使用它,或者您可以保存 zap 并使用 Python 在同一代码模块中发送请求请求库 http://docs.python-requests.org/en/master/正如我在代码示例中所示。

感谢您提供学习机会,希望对您有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Zapier 自定义请求 Webhook 与 JSON Web 令牌结合使用 的相关文章

  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s

随机推荐