当前位置: 首页 > 知识库问答 >
问题:

如何使用指数(e)和模(n)生成RSA公钥来验证json Web令牌的签名?

戚兴思
2023-03-14

我的目标是使用jsonwebmark验证方法以JSON Web Token(JWT)格式验证我的id_token,该方法需要公钥作为第二个参数。我的Web应用程序是一个节点js应用程序。

根据ping ID的留档,我应该使用指数(e)和模(n)生成RSA公钥。这是一个适用于我的id_token的示例

   {
    "kty": "RSA",
    "kid": "IlOPtWXUcpiPttmr-K7DmehzeRM",
    "use": "enc",
    "n": "qv2XCvfUfW0bG547B1xieE0-GN8xLuCdzGcIWsYMP-fn1vR2ptR7XOp_kW-etlxSDT2MVyzdXbG9eQCgeBk-Ajgbyn4AaFScJt9ibGyE-5hUvkSJRTP-jlJjlPniYsKcjEY3C-QzyRcEIHoOHOEuevIFwVvKNRgEVYyx3CmkmIXcfw35R1tORNjCec_NA6dawx_LPpS0endjNz2m_iijLquKenrsKSKVnBprfVtBh_myuNQD5CfhBnzZRmAUfr0PoVMDBb0r_rWaV1Q64zQWSeCql7CSWq4U8RNhogd0eCZOOv45plIUwoxkdNg0Rzkp-OEtKRLaHonJ_OZ_sxa8-w",
    "e": "AQAB"
    },

问题是,如何使用这些值生成公钥?是否有一个节点js库可以做到这一点?

我是密码学新手,所以请原谅我的初学者问题。

共有1个答案

苏胤
2023-03-14

如果您想使用jsonwebToker验证方法,那么您可以通过将jwk转换为pem字符串来完成,例如,使用jwt-to-pem。使用包网站上的示例,它是这样的:

首先你安装

npm i jwt-to-pem -D

然后转换并使用

import * as jwtToPem from 'jwt-to-pem';
import {verify} from 'jsonwebtoken';

let jwk = {
    "kty": "RSA",
    "kid": "IlOPtWXUcpiPttmr-K7DmehzeRM",
    "use": "enc",
    "n": "qv2XCvfUfW0bG547B1...",
    "e": "AQAB"
};

let pem_str = jwtToPem(jwk);

//Finally, verification for some token
verify(id_token, pem_str);

仅此而已。我在node的加密文档中看到,您应该能够在没有外部依赖的情况下完成它,但我没有管理它!

 类似资料:
  • 我想知道是否有一个示例C代码或库可以使用RSA公钥验证我的JWT令牌签名。我找不到任何涉及C的示例 openssl for C没有任何与RSA相关的示例。 谢谢

  • 在PHP中,我试图使用AWS的RSA公钥(我在https://cognito-identity.amazonaws.com/.well-known/jwks_uri). 密钥以适当的页眉/页脚开始,然后开始RSA公钥等等。我查看了一些PHP库,如Emarref\Jwt\Jwt\code>,但是我发现了错误:。这一切归结为基本的php函数:。 我已经研究了php。net/manual进行openss

  • 我的理解是公钥加密,私钥解密...有谁能帮我弄明白吗?

  • 主要的问题是,我对C相当陌生,OpenSSL留档对我来说不够清晰,我尝试过使用读和写rsa键到C中的pem文件,但我不太明白。例如,函数如何创建私有和公共?而从何而来?pcszPassphrase的意义是什么? 我会解释,好像这是某种伪代码,这就是我想做的,粗体部分是我不知道如何做的: 生成私钥和公钥作为十六进制缓冲区(客户端) 基本上,我知道如何处理AES加密/解密和通信协议,反正他们已经实现了

  • 问题内容: 我有一个外部服务,在定义的事件发生后会给我回电,并用其私钥签署他的请求。 我已经存储了如下公钥: 因此,我的工作是通过验证签名来检查请求的内容是否未更改。 这是我的算法: 但是目前,我的算法已停止在此消息的“ PublicKey publicKey = keyFactory.generatePublic(publicKeySpec)”步骤处: 那么,如何以java api接受的方式加载

  • 我在Android中生成了一个公共私钥对。现在我需要将我的公钥发回服务器,以便用RSA加密进行通信。但是,我正在与一个。NET服务器(用C)进行通信。因此,我需要以以下格式发送我的公钥: 我用以下代码生成密钥对: 我如何提取我刚刚生成的公钥的模和指数?