Я пытаюсь использовать внешний API для пользователя, который требует использования сертификата клиента TLS. Предварительно указав, что используемый мной сертификат правильно работает с POSTMAN, где я получаю правильный ответ от того же API, я не могу установить sh соединение для вызова внутри моей функции Lambda, получая ошибку CONNECTION RESET.
Спасибо всем, кто может помочь! Андреа
Следует код:
function getBearerTokenFromProvider(session,callback) {
console.log('getBearerTokenFromProvider - start');
var https = require('https');
var querystring = require('querystring');
var bearer = '';
var isEndedOk;
var postData = querystring.stringify({
grant_type: 'client_credentials',
client_id: 'xxxxxxxxxxxxxxx',
client_secret: 'xxxxxxxxxxxxx',
scope: 'sandbox'
});
// preparing the call parameters
var postOptions = {
host: 'api.provider.com',
path: '/auth/oauth/v2/token',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
},
// agentOptions to manage the TLS mutual authentication certificates usage
agentOptions: {
//certificate is available in deploy package
pfx: fs.readFileSync(process.env.LAMBDA_TASK_ROOT + '/certishere/cert.p12'),
passphrase: 'certpass'
}
};
console.log('postOptions= ' + JSON.stringify(postOptions));
console.log('postData= ' + JSON.stringify(postData));
// Setting up the request
var post_req = https.request(postOptions, function(res) {
var statusCode = res.statusCode;
let error;
console.log('statusCode=' + statusCode);
if (statusCode !== 200) {
error = new Error('Request Failed.\n' +
`Status Code: ${statusCode}`);
}
res.setEncoding('utf8');
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; });
res.on('end', () => {
console.log('Content della postReq= ' + String(post_req));
try {
const parsedData = rawData;
console.log('String(parsedData)=' + String(parsedData));
if (error) {
isEndedOk = false;
console.error(error.message);
console.error('Response Content=' + String(parsedData));
// Consume response data to free up memory
res.resume();
} else {
isEndedOk = true;
console.log('Response Content=' + String(parsedData));
bearer = JSON.parse(parsedData);
bearer = bearer.token_type + ' ' + bearer.access_token;
console.log('Bearer Token=' + bearer);
}
callback(session.attributes,
callBack_getBearerTokenFromProvider(bearer, statusCode, session, callback, isEndedOk));
console.log('getBearerTokenFromProvider - result: ' + isEndedOk);
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});
post_req.write(postData);
post_req.end();
}