我正在尝试实施salesforce爱因斯坦,并试图获得其api的授权。
在docs中写为:
创建JWT有效负载。有效负载是JSON,其中包含:
sub-您的电子邮件地址。这是您用来注册Einstein Platform Services帐户的Salesforce组织中包含的电子邮件地址。
aud-用于生成令牌的API端点URL。
exp-Unix时间中的到期时间。该值是当前Unix时间(以秒为单位)加上您希望令牌有效的秒数。出于测试目的,您可以在Time.is上获取Unix时间。
JWT有效负载看起来像这样的JSON。
JSON
{
"sub": "<EMAIL_ADDRESS>",
"aud": "https://api.einstein.ai/v2/oauth2/token",
"exp": <EXPIRATION_SECONDS_IN_UNIX_TIME>
}
使用您的RSA私钥对JWT有效负载进行签名以生成断言。私钥包含在注册帐户时下载的einstein_platform.pem文件中。生成断言的代码因您的编程语言而异。如果您要进行手动测试,则可以使用jwt.io生成一个断言。
如何在python中生成断言字符串?
可以用pyjwt完成找到的jwt处理。 https://pyjwt.readthedocs.io/en/latest/ 但是我对获取断言字符串到底要做什么却感到困惑。
调用curl请求以获取响应
curl -X POST \
https://api.einstein.ai/v2/oauth2/token \
-H 'Content-type: application/x-www-form-urlencoded' \
-H 'cache-control: no-cache' \
-d 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJodHRwczovL2FwaS5laW5zdGVpbi5haS92Mi9vYXV0aDIvdG9rZW4iLCJleHAiOjM2MDAsInN1YiI6ImJpdHR1LmNwcEBnbWFpbC5jb20ifQ.MHPzgIGThAwHzGCgEAHU8MyJafbIBQVuK_nW4f5ZUh8hN6eh50XbuP7YnDsCeTH0tIQA0OZlEveVnwnmvi1slnNEhad30NB76J-eLCBYK1xUnj2ZfESRaXxP65XMj_KRWdqgF9dMNLsjA08pPeFkBT1rSM8EmWxlCm_BuDPuQRt1zuSSdtWBInIeBafHhyMmdptTHMTeah0epZiyVhyiGscVkApU0bzhUG5AYGixEldemM6xATWs5EjEfZa-4kG26p2QhyHdjIno2n63nuq82A4Kna4GpHlo7QdqRvvUSDJFB_pM33s_LmMxGY_mNmUuDqpQdJ2k15OF9fvnVTUuVg&undefined='
但是得到答案
{
"message": "Invalid JWT assertion"
}
答案 0 :(得分:3)
首先安装pyjwt
和cryptography
:
$ pip install pyjwt
$ pip install cryptography
阅读您的.pem
文件内容,并使用它生成断言字符串,如下所示:
import jwt
payload = {
"sub": "<EMAIL_ADDRESS>",
"aud": "https://api.einstein.ai/v2/oauth2/token",
"exp": "<EXPIRATION_SECONDS_IN_UNIX_TIME>" # UNIX timestamp (integer)
}
with open('einstein_platform.pem') as f:
assertion_string = jwt.encode(payload, f.read(), algorithm='RS256')
print(assertion_string)