gpt4 book ai didi

python - 使用带有 JSON Web token 的 Zapier 自定义请求 Webhook

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:09 26 4
gpt4 key购买 nike

我需要访问一个使用 JSON Web token 作为身份验证方法的 API。是否有使用 Python 代码步骤创建此 token 然后将该 token 作为 header 添加到自定义请求 Webhook 步骤的好方法?

最佳答案

我使用 API 进行身份验证的经验是使用简单的 API key 方法。因此,我首先阅读了您的问题,但没有完全理解。我决定做一些研究并希望在此过程中学到一些东西,我当然做到了。我在下面分享我的发现和答案:

对于初学者,我开始阅读 JSON Web Tokens (JWT),这将我带到了 JWT 网站,这是一个很好的资源。它非常清楚地说明了构成 JWT 的组件以及它们需要如何格式化,我强烈建议您看一下。

从JWT网站上我发现一个JWT由三个部分组成:

  1. 一个 base64 URL 安全编码 header 。
  2. base64 URL 安全编码负载。
  3. base64 URL 安全编码签名。

以上所有三个组合形成了正确格式的 JWT。幸运的是,JWT 网站有一个为 Python 制作的库列表。不幸的是,这些第三方库在 Zapier 代码模块提供的普通 Python 中均不可用。要完成这项工作,需要阅读一些 source code 并利用我们现有的库。因此,经过几个小时的反复试验,我得出了以下用于生成格式正确的 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 测试此输出。

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

因此,有了 JWT,您可以在 Zapier Webhooks 自定义获取请求步骤中使用它,或者您可以保存 zap 并使用 Python 的 request library 在同一代码模块中发送请求,就像我在代码示例中使用的那样。

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

关于python - 使用带有 JSON Web token 的 Zapier 自定义请求 Webhook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com