Node.js GitHub API在尝试生成访问令牌时返回401
我正试图通过GitHub API为我的GitHub应用程序生成访问令牌 我收到401未经授权的响应错误:Node.js GitHub API在尝试生成访问令牌时返回401,node.js,github-api,github-app,Node.js,Github Api,Github App,我正试图通过GitHub API为我的GitHub应用程序生成访问令牌 我收到401未经授权的响应错误: 过期时间”索赔('exp')在未来太远了 我的代码: const now = Date.now() const expiration = now + 60 * 10 // JWT expiration time (10 minute maximum) const payload = { iat: now exp: expiration, iss: appId } const
过期时间”索赔('exp')在未来太远了
我的代码:
const now = Date.now()
const expiration = now + 60 * 10 // JWT expiration time (10 minute maximum)
const payload = {
iat: now
exp: expiration,
iss: appId
}
const jwt = jwtGenerator(payload, privatePem, { algorithm: "RS256" })
Github文档-Github可能希望在
exp
下有一个以秒为单位的纪元时间。
如果你看ruby示例,他们使用Time.now.to_i
返回以秒为单位的历元时间。
Javascript的Date.now()
返回的历元时间(毫秒)太大,您应该尝试将Date.now()除以1000,例如:
const now=(Date.now()/1000)
const expiration=now+(60*10)//JWT过期时间(最多10分钟)
常数有效载荷={
iat:现在
exp:到期,
iss:appId
}
const jwt=jwtGenerator(有效载荷,privatePem,{算法:“RS256”})
jsonwebtoken
的文档特别提到:
使用除以1000
和Math.floor
进行适当的整数转换-我能够让GithubAPI使用jwt.sign我找到了问题所在
不同机器上的时间不同步。
为了解决这个问题,我在过去将iat时间设置为30秒(我尝试了不同的时间跨度,但结果证明30秒效果最好)
您在nodeJS中使用哪个包作为jwtGenerator
“jsonwebtoken”:“^8.5.1”
jwtGenerator
它只是一个包装jsonwebtoken
的sign
函数的函数好主意,我也试过了,但似乎这不是问题所在,两种格式都适用
const now = Math.floor(Date.now() / 1000) - 30
const expiration = now + 60 * 10 // JWT expiration time (10 minute maximum)
const payload = {
iat: now,
exp: expiration,
iss: appId
}
const jwt = jwtGenerator(payload, privatePem, { algorithm: "RS256" })