Учетные данные aww4 не принимаются при отправке через pactjs - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь проверить мой pact.json, сгенерированный моим потребителем.Однако для проверки мне нужно включить учетные данные AWS4, чтобы иметь возможность получить ответ от моего провайдера.Я пытаюсь сделать это с помощью customProviderHeaders.Я использую библиотеку AWS4 (https://github.com/mhart/aws4) для генерации токена. Ниже приведен мой код:

const aws4 = require('aws4');
const path = require('path');
import { before, beforeEach, describe, it } from 'mocha';

const {
    Verifier
} = require('../../../node_modules/@pact-foundation/pact');


function getToken() {
    const opts: any = {
        method: 'GET',
        region: 'us-east-2',
        service: 'execute-api',
        path: '/qa/api/',
        host: '123456789.execute-api.us-east-2.amazonaws.com',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    };

    aws4.sign(opts, {accessKeyId: '$AWSACCESSKEY', secretAccessKey: '$AWSSECRETKEY'});
    return opts.headers;
}


describe('Pact Verification', () => {

    it('should validate the watchlist expectations', () => {
        let headers = getToken();
        let  authToken = headers.Authorization;
        let date = headers[`X-Amz-Date`];


        let opts = {
            provider: 'DealerBlock',
            providerBaseUrl: 'https://3ua1cprd53.execute-api.us-east-2.amazonaws.com',
            pactUrls: [path.resolve(process.cwd(), 'src/test/pact/path_to_my_json')],
            customProviderHeaders: [`Authorization: ${authToken}`, `X-Amz-Date: ${date}`]
        };

        return new Verifier().verifyProvider(opts)
            .then(output => {
                console.log('STARTED');
                console.log(opts.pactUrls);
                console.log('Pact Verification Complete');
                console.log(output);
            });
    });

});

Функция getToken () генерирует новый токен, а затем я получаю токен, дату ивставьте их в мой запрос, используя заголовки поставщика.

Я вижу следующее:

 INFO: Replacing header 'Authorization: ' with 'Authorization: AWS4-HMAC-SHA256 Credential=AKIAJ5FTCODVMSUTEST/2018908/us-east-2/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=ceea9aac0303769da58357cb37cb849cb0bbfc13ff0a25cea977385368531349'
 INFO: Replacing header 'X-Amz-Date: ' with 'X-Amz-Date: 20180528T184202Z'

Однако я получаю следующую ошибку:

Actual: {"message":"The request signature we calculated does not match the signature you provided. 
Check your AWS Secret Access Key and signing method. Consult the service documentation for details."}

Использую ли яcustomProviderHeaders в правильном порядке? Или у кого-нибудь есть какие-либо предложения относительно того, что я должен делать по-другому? Я могу отправить запрос, используя те же учетные данные через Postman, поэтому не уверен, что здесь происходит.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Мне удалось заставить это работать, когда я передал заголовки: 'Content-Type': 'application / x-www-form-urlencoded' через customProviderHeaders.

Даже если этот заголовок был указан в моемсгенерированный потребителем контракт json, поставщик пакта, похоже, его не видел.

0 голосов
/ 29 мая 2018

Это выглядит нормально для моих глаз.

Может быть, вы не интерполируете переменные (которые, кажется, нигде не определены) в следующем выражении:

aws4.sign(opts, {accessKeyId: '$AWSACCESSKEY', secretAccessKey: '$AWSSECRETKEY'});
...