Для работы, где мне нужно установить oauth
аутентификацию клиента с private_key_jwt
на F5 big-ip. Поскольку встроенный модуль для oauth не отвечает за проверку подлинности такого типа, этого необходимо достичь с помощью их модуля iRuleLX
, основанного на nodejs.
У меня есть следующий код для шифрования JWT
, но в некоторых системах результат первого обещания недоступен до выполнения второго обещания, что приводит к ошибке c.
Я предпринял попытку Google найти способ последовательной обработки двух обещаний, но я не смог найти правильный способ его достижения (обработайте asKey перед выполнением обещания createEncrypt).
Если честно, я не знаком с Node.js
.
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", function(req, res) {
var payload = req.params()[0].toString();
JWK.asKey(skey)
.then(function(result) {
key = result;
})
.catch(function(error) {
key = "nok";
});
if (key != "nok") {
jose.JWE.createEncrypt(options, key)
.update(payload, "utf8")
.final()
.then(function(result) {
token = result;
})
.catch(function(error) {
token = "nok";
});
}
res.reply(token);
});
ilx.listen();