Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs:按顺序运行承诺_Javascript_Node.js_Oauth_Jwt - Fatal编程技术网

Javascript Nodejs:按顺序运行承诺

Javascript Nodejs:按顺序运行承诺,javascript,node.js,oauth,jwt,Javascript,Node.js,Oauth,Jwt,对于需要在F5大ip上使用private\u key\u jwt进行oauth客户端身份验证的工作。 由于oauth的内置模块不负责这种身份验证,因此必须通过基于nodejs的iRuleLX模块来实现 我有以下代码来加密JWT,但在某些系统上,第一个承诺的结果在第二个承诺执行之前不可用,这导致了ofc错误 我在google上做了一些努力,想找到一种方法来按顺序处理这两个承诺,但我没有找到正确的方法来实现它(在执行createEncrypt承诺之前先处理asKey) 老实说,我不熟悉Node.js

对于需要在F5大ip上使用
private\u key\u jwt
进行
oauth
客户端身份验证的工作。 由于oauth的内置模块不负责这种身份验证,因此必须通过基于nodejs的
iRuleLX
模块来实现

我有以下代码来加密JWT,但在某些系统上,第一个承诺的结果在第二个承诺执行之前不可用,这导致了ofc错误

我在google上做了一些努力,想找到一种方法来按顺序处理这两个承诺,但我没有找到正确的方法来实现它(在执行createEncrypt承诺之前先处理asKey)

老实说,我不熟悉
Node.js

var f5=require(“f5节点”);
const{JWE,JWK}=require(“node jose”);
var ilx=new f5.ILXServer();
var contentAlg=“A128CBC-HS256”;
var key=“nok”;
var token=“nok”;
康斯特·斯凯={
kty:“RSA”,
e:“AQAB”,
使用:“enc”,
孩子:“e1”,
n:
4.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvJ6J5CBCDWNTAHF9MOJS-ZwcAAvbgQ“,
alg:“RSA-OAEP”,
密钥操作:[“加密”、“换行”、“换行]
};
变量选项={
是的,
contentAlg:contentAlg,
字段:{
alg:“RSA-OAEP”,
孩子:“e1”,
cty:“JWT”,
附件:内容
}
};
ilx.addMethod(“test_jwk”),函数(req,res){
var payload=req.params()[0].toString();
JWK.asKey(skey)
.然后(函数(结果){
关键=结果;
})
.catch(函数(错误){
key=“nok”;
});
如果(键!=“nok”){
jose.JWE.createEncrypt(选项,密钥)
.更新(有效载荷,“utf8”)
.final()
.然后(函数(结果){
令牌=结果;
})
.catch(函数(错误){
token=“nok”;
});
}
回复(令牌);
});
ilx.listen();

您可以使用异步等待:

ilx.addMethod('test_jwk', function async (req, res) {

var payload = req.params()[0].toString();


try {
      const key = await JWK.asKey(skey);

      const token = await jose.JWE.createEncrypt(options, key).update(payload, "utf8").final();

      res.reply(token); 
   } catch {
      res.reply('nok');
   }

});

如果需要,可以使用try-catch来包围函数体。

可以使用async/Await

试试这个

var f5 = require('f5-nodejs');
const { JWE, JWK } = require('node-jose')
var ilx = new f5.ILXServer();
var contentAlg = "A128CBC-HS256";
var key = "nok";
var token = "nok";
const skey =
{
    "kty": "RSA",
    "e": "AQAB",
    "use": "enc",
    "kid": "e1",
    "n": "vVm75k4dzUw_iuG8NvIvGS8o3dMvlpXwBX44ZcGgBzCnzHKjY37T8newmRcfmFkpvTR0qgYqtPeev5RwOZXXDO9Seg6Zkc_6sZjfSpeiOBebwW1DeZlEiYCTWSg6Ri5H26S3j6R8H_b3BCrtcd3gcmD7OwY280QvJ8eDmbJaj4aAaXf_Ef9RTYz1qJHnehbNRlmRr-OJuuYpsH497Is-c7OvUSLfMkItj9mtRKuk4DQ0LY5c5MYiyx1NidCuQTSK4VZSA3l6zMq-WN1pRb61hjfI74OO7gT256vQZZSq0DrzMPxA0mGeNDBlj6J5cBcdwnTAhF9mojs-ZwcAAvbgQ",
    "alg": "RSA-OAEP",
    "key_ops": ["encrypt", "wrap", ""]
};
var options =
{
    compact: true,
    contentAlg: contentAlg,
    fields:
    {
        "alg": "RSA-OAEP",
        "kid": "e1",
        "cty": "JWT",
        "enc": contentAlg
    }
};
ilx.addMethod('test_jwk', async function (req, res) {
    var payload = req.params()[0].toString();
    try {
        key = await JWK.asKey(skey);
    } catch (error) {
        key = "nok";
    }

    if (key != "nok") {
        try {
            token = await jose.JWE.createEncrypt(options, key).update(payload, "utf8").final();
        } catch (error) {
            token = "nok";
        }
    }

    res.reply(token);
});
ilx.listen();
使用
然后链接

ilx.addMethod('test_jwk',  function (req, res) {
    var payload = req.params()[0].toString();
        JWK.asKey(skey)
        .then( (result) => {
           return  result;
        })
        .then( key => {
            if(key !== "nok"){
                return jose.JWE.createEncrypt(options, key).update(payload, "utf8").final();
            } else {
                throw "Invalid key";
            }
        })
        .then( resToken => {
            token = resToken;
            res.reply(token);
        })
        .catch( error => {
            res.reply("nok");
        });
});

非常感谢,它正在为顺序执行工作。我还必须找到createEncrypt的另一个问题,它似乎创建了一个错误,我将对此进行调查。