2

F5 big-ip でoauthクライアント認証を行う必要がある仕事のために。private_key_jwtoauth の組み込みモジュールはこの種の認証を担当しないため、iRuleLXnodejs ベースのモジュールを介してこれを実現する必要があります。

を暗号化する次のコードがありますJWTが、一部のシステムでは、最初の promise の結果が 2 番目の promise が実行される前に利用できないため、c のエラーが発生します。

2 つの約束を順番に処理する方法を見つけるために Google の努力をしましたが、それを達成する正しい方法を見つけることができませんでした (createEncrypt 約束を実行する前に asKey を処理します)。

正直なところ、私はよく知りません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();

4

2 に答える 2