【发布时间】:2020-04-28 16:15:49
【问题描述】:
我正在开发用于自定义目的的 OAuth 服务器实现,并尝试使用 Google 的 KMS 服务来签名/验证 JWT 令牌。
我能够很好地创建签名,问题从验证步骤开始 - 总是导致错误(无效令牌)。然后我继续简化代码以找到原因,最终得到了一个我无法进一步简化但仍然无法工作的代码。我的代码基于Google KMS Docs 中的示例。
export async function sign (message: string): Promise<Buffer> {
const name = getKeyPath();
const digest = crypto.createHash('sha512').update(message).digest();
const [ result ] = await client.asymmetricSign({
name,
digest: {
sha512: digest
}
});
return result.signature as Buffer;
}
export async function verify (message: string, signature: Buffer): Promise<boolean> {
const publicKey = await getPublicKey();
const verifier = crypto.createVerify('SHA512');
verifier.write(message);
verifier.end();
return verifier.verify(publicKey, signature);
}
export async function getPublicKey (): Promise<string> {
const name = getKeyPath();
const [ publicKey ] = await client.getPublicKey({ name });
return publicKey.pem;
}
(async () => {
const message = 'test';
const signature = await sign(message);
const valid = await verify(message, signature);
console.log(message);
console.log(signature);
console.log(valid);
})();
结果:
test
<Buffer 19 a2 89 37 e5 43 78 c8 63 6b 7e 19 28 10 f7 93 ad c0 fa 10 ce 0a 06 2d 79 52 58 9a a4 7c d5 77 1c 99 b2 cb ce 67 e8 93 d6 0e ef b9 f6 95 89 19 4e 28 ... 462 more bytes>
false
【问题讨论】:
标签: node.js typescript digital-signature google-cloud-kms