Node.js / express / passport / saml - Как проверить содержимое исходящего HTTP-запроса к провайдеру идентификации SAML? - PullRequest
0 голосов
/ 17 октября 2018

Я новичок в node.js, но у меня есть пример приложения, написанного для node.js, в котором показан способ интеграции с конкретным провайдером идентификации (SAML).Используя этот пример приложения, я пытаюсь проверить, что отправляется в HTTP-запросах, сделанных из серверной части node.js в удаленный IdP.Для меня будет достаточно регистрации заголовков и тела запроса путем записи в console.log.Мониторинг сетевого трафика с помощью какого-либо инструмента, такого как Fiddler, для меня не вариант, потому что я не могу запустить его локально, мне нужно открыть приложение и развернуть его в Heroku.

Я пробовал morgan,но он только перехватывает ВХОДЯЩИЕ запросы.Я также попробовал global-request-logger, но по какой-то причине он не внедряется в экспресс-каркас и паспорт.Похоже, что в паспорте не используются стандартные модули для HTTP-запросов?

Вопрос в том, что мне нужно использовать, чтобы регистрировать содержимое HTTP-запросов, сделанных паспортом во время вызова .authenticate ()?Есть ли какой-либо флаг, который я могу установить в паспорте, чтобы включить ведение журнала HTTP?Или мне лучше сделать это в экспрессе?Или, может быть, какой-то другой пакет предоставит мне необходимую функциональность?

РЕДАКТИРОВАТЬ: мой первоначальный вопрос был помечен как возможный дубликат как протоколировать ВЫХОДНЫЕ запросы https от узла в веб-шторме

Но на самом деле я уже видел эту тему и пытался настроить хук на модуль http, это было сделано следующим образом:

'use strict';

// Setup express.js application:
var express = require('express');
var app = express();

// Patch "http" module with outgoing request logging:
var http = require('http');
const originalRequest = http.request;
http.request = function wrapMethodRequest(req) {
    console.log('EXTERNAL OUTGOING REQUEST LOGGING:');
    console.log(req.host, req.body);
    return originalRequest.apply(this, arguments);
}

Этот подход не работал.Как уже говорилось в оригинальном вопросе, кажется, что в паспорте не используется стандартный модуль http?Или я что-то не так с кодом выше?Как уже упоминалось в первоначальном вопросе, я также пытался обработать его с помощью пакета global-request-logger (который, как объяснено в возможном дублированном посте, использует ту же технику).Код для этого был:

'use strict';
var express = require('express');
var app = express();    
var bodyParser = require('body-parser');
var passport = require('passport');
var SamlStrategy = require('passport-saml').Strategy;
app.use(bodyParser.urlencoded({ extended: false }));    
var globalLog = require('global-request-logger');
globalLog.initialize();    
globalLog.on('success', (req, res) => {
    console.log('HTTP(S) CALLOUT SUCCESS');
    console.log('REQUEST: ', req);
    console.log('RESPONSE: ', res);
});    
globalLog.on('error', (req, res) => {
    console.log('HTTP(S) CALLOUT ERROR');
    console.log('REQUEST: ', req);
    console.log('RESPONSE: ', res);
});
...
...