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

Not able to create OAuth Token using Private Key for Salesforce Einstein

我一直在关注有关如何为 Salesforce Einstein 创建 OAuth 令牌的文档。我有我的 private key 并且能够创建 JWT 令牌(底部代码),但是当我使用我的令牌尝试文档(第 4 步)中概述的 CURL 命令时检索到 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'});

知道我做错了什么吗?

我花了一段时间才弄明白...问题是 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);

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