首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用LetsEncrypt创建与Node.js兼容的JWT?

如何使用LetsEncrypt创建与Node.js兼容的JWT?
EN

Stack Overflow用户
提问于 2016-11-20 00:05:09
回答 1查看 848关注 0票数 0

我正在尝试将一个JSON Web令牌发布到让我们使用Node.js加密新注册端点。如何创建此令牌?这是一些我一直在试验的代码,试图生成一个令牌,让我们加密它的Let服务器将接受:

代码语言:javascript
复制
var jwt = require('jsonwebtoken');    
var jws = require('jws');
var crypto = require('crypto');
var pem = require('pem');
var jose = require('node-jose');
var keystore = jose.JWK.createKeyStore();

var key;

var props = {
  //kid: 'gBdaS-adsfasdfasdfsa',
  alg: 'HS256',
  //use: 'enc',
    n: "pK7LuT2hxkWnYRl1Tcw9iAy9-_TqvHp2wh6EcHq_wglsNmtpxAe9gNGZevWu6T2O1aEmPYkgy7Q1meKNifenFuWicDcSSenkMM0JApfdveiVqjBA81EL0Y76T8i2JolggGXbiSa_ZRGwG-0FPDSIX3Jy5mQgOn-t-zrhD9yLDn2N7zzFqCBOtxzrwz1HEtN8QWZAFAzOceyyL6C791lGOk9SYYekxyuZkwkzhDEsoqR7fN6hmu6IfIU8hF5kt8M_Gef30wt5dUESvcTNdmQmq_L1QYA8qYO6-T0mC0zIpHpwQnANYOSZBCz1uE-vwS17MlfnUwGkPHJXWThlMZqZmQ",
    e: "AQAB"
};
keystore.generate("oct", 256, props).
        then(function(result) {   

          console.log(result);

         var obj = {
              header: {
                alg: "HS256",
                jwk: result,
                nonce: "kajdfksajdf39393"
              },
              payload: {
                  "resource": "new-reg",
                  "contact": [
                    "mailto:cert-admin@example.com",
                    "tel:+12025551212"
                  ]
                },
              secret: 'has a van',
            };

          const signature = jws.sign(obj);     
            console.log(signature);    
        });
}

这实际上生成了一个有效的JWT:

eyJhbGciOiJIUzI1NiIsImp3ayI6eyJrdHkiOiJvY3QiLCJraWQiOiJXeVFRNFNJV2I4SGJIM2ZrQnRLOHdnR1NibU9zaGZNeUNWODZyTWdoOTR3IiwiYWxnIjoiSFMyNTYiLCJuIjoicEs3THVUMmh4a1duWVJsMVRjdzlpQXk5LV9UcXZIcDJ3aDZFY0hxX3dnbHNObXRweEFlOWdOR1pldld1NlQyTzFhRW1QWWtneTdRMW1lS05pZmVuRnVXaWNEY1NTZW5rTU0wSkFwZmR2ZWlWcWpCQTgxRUwwWTc2VDhpMkpvbGdnR1hiaVNhX1pSR3dHLTBGUERTSVgzSnk1bVFnT24tdC16cmhEOXlMRG4yTjd6ekZxQ0JPdHh6cnd6MUhFdE44UVdaQUZBek9jZXl5TDZDNzkxbEdPazlTWVlla3h5dVprd2t6aERFc29xUjdmTjZobXU2SWZJVThoRjVrdDhNX0dlZjMwd3Q1ZFVFU3ZjVE5kbVFtcV9MMVFZQThxWU82LVQwbUMweklwSHB3UW5BTllPU1pCQ3oxdUUtdndTMTdNbGZuVXdHa1BISlhXVGhsTVpxWm1RIiwiZSI6IkFRQUIifSwibm9uY2UiOiJrYWpkZmtzYWpkZjM5MzkzIn0.eyJyZXNvdXJjZSI6Im5ldy1yZWciLCJjb250YWN0IjpbIm1haWx0bzpjZXJ0LWFkbWluQGV4YW1wbGUuY29tIiwidGVsOisxMjAyNTU1MTIxMiJdfQ.RiHTdM_k1eLUJaGx4b59w8-hEQ-J0SpZjPIeGWhh1yg

但是,当我试图将它张贴到新的注册端点时,我会得到以下错误:

代码语言:javascript
复制
{  "type": "urn:acme:error:malformed",   "detail": "Parse error reading JWS",   "status": 400 }

测试代码是我在Googling上搜索了几个小时后收集的代码片段。我知道我可以运行LetsEncrypt服务器,但不想运行。我实际上希望在Node.js中直接生成请求和回调,因为我想从AWS函数(这里没有涉及服务器)运行所有这些请求和回调。

我确实找到了一个实际工作的JWT令牌示例,算是吧。我说“有点”,因为这个例子的反应是:

代码语言:javascript
复制
{  "type": "urn:acme:error:badNonce",  "detail": "JWS has invalid anti-replay nonce 5H63XwyOHKpAETFpHR8stXSkhkqhlAY1xV7VsCnOrs",  "status": 400}

这至少告诉我,JWT令牌正在被解析,而现在正被查看。当我解码这个JWT时,我看到如下:

看起来这个家伙用RSA 256来创建这个JWT。我不知道"e“和"n”是从哪里来的?

如何使用Node.JS / Jose?重新创建上述工作示例

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-20 20:09:48

我认为这里的答案是只使用让人加密 node.js NPM包。不需要从头开始开发ACME协议,因为这个库似乎就是这样做的。

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

https://stackoverflow.com/questions/40699286

复制
相关文章

相似问题

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