无法使用 Salesforce Einstein 的私钥创建 OAuth 令牌

Posted

技术标签:

【中文标题】无法使用 Salesforce Einstein 的私钥创建 OAuth 令牌【英文标题】:Not able to create OAuth Token using Private Key for Salesforce Einstein 【发布时间】:2020-10-04 08:55:04 【问题描述】:

我一直在关注有关如何为Salesforce Einstein 创建OAuth 令牌的文档。我有我的private key 并且能够创建JWT 令牌(底部的代码)但是当我尝试文档中概述的CURL 命令时(第4 步)使用我检索到的令牌我得到INVALID JWT Assertion错误。

文档:https://metamind.readme.io/docs/generate-an-oauth-token-using-your-key

这就是我创建签名JWT的方式

require('dotenv').config();
const jwtToken = require('jsonwebtoken');

const payload = 

 "sub": "<EINSTEIN_PLATFORM_SERVICES_USERNAME>",
 "aud": "https://api.einstein.ai/v2/oauth2/token",
 "exp": <EXPIRATION_SECONDS_IN_UNIX_TIME>


const token = jwtToken.sign(payload, process.env.EINSTEIN_KEY, algorithm : 'RS256');

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

我花了一段时间才弄明白...问题是我给的 UNIX 时间是一年中的某事 1970 -_- 所以当然,因为 JWT 令牌过期了我没有能够从Salesforce Einstein 检索访问令牌。

我建议使用以下资源在UNIX 秒内获取正确的过期时间:https://www.epochconverter.com/。

这是我生成JWT Assertion String 的最终代码:

require('dotenv').config()
const fs = require('fs);
const jwt = require('jsonwebtoken');

let privateKey = fs.readFileSync(process.env.PRIVATE_KEY);

const header = 
  algorithm: "RS256"


const payload = 
 "sub": "<EINSTEIN_PLATFORM_SERVICES_USERNAME>",
 "aud": "https://api.einstein.ai/v2/oauth2/token",
 "exp": 1907891585 //Epoch timestamp of 6/17/2030


let token = jwt.sign(payload, privateKey, header);

使用此代码,我能够检索访问令牌!

【讨论】:

以上是关于无法使用 Salesforce Einstein 的私钥创建 OAuth 令牌的主要内容,如果未能解决你的问题,请参考以下文章

学习Salesforce | Einstein业务机会评分怎么玩

SaaS+智慧场馆 | 远古信息

无法为 Salesforce 运行 Lightning 测试服务 (LTS)

无法从 Mule Salesforce 获取访问令牌

洛谷 P1636 Einstein学画画

luoguP1636 Einstein学画画 x