首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Cloud Key Management Service用于签署JSON Web令牌

Google Cloud Key Management Service用于签署JSON Web令牌
EN

Stack Overflow用户
提问于 2019-04-24 18:55:47
回答 1查看 326关注 0票数 3

首先,我尝试了这个解决方案:Using Google Cloud Key Management Service to sign JSON Web Tokens,但它不起作用。

创建签名:

代码语言:javascript
复制
const TimeStamp = Math.floor(new Date().getTime() / 1000)

let body = base64url(
    JSON.stringify({
        alg: 'RS256',
        typ: 'JWT'
    })
)
body += '.'
body += base64url(
    JSON.stringify({
        iss: 'some-iss',
        aud: 'some-aud',
        iat: TimeStamp,
        exp: TimeStamp + parseInt(process.env.TOKEN_EXPIRY, 10)
    })
)

const hashedMessage = crypto
                .createHash('sha256')
                .update(body)
                .digest('base64')
const digest = { sha256: hashedMessage }

const [signatureObj] = await client
    .asymmetricSign({ name, digest })
    .catch(console.error)

const signature = base64url(signatureObj.signature)
const token = `${body}.${signature}`

然后验证:

代码语言:javascript
复制
const[publicKeyObject] = await client.getPublicKey({ name }).catch(console.error)
const publicKey = publicKeyObject.pem

const verify = crypto.createVerify('sha256')
verify.write(body)
verify.end()
verify.verify(publicKey, base64url.decode(signature), 'base64')

我不知道代码出了什么问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 23:01:40

signatureObj.signature是一个缓冲区,不是一个字符串。遗憾的是,文档在这一点上是不正确的。

跳过base64编码/解码步骤应该会产生正确的结果(verify.verify可以接受缓冲区作为签名参数)。

为了真正将签名的内容编码到JWT中,您需要类似于signatureObj.signature.toString('base64')的内容。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55828435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档