Создание заголовка аутентификации в ExpressJS.Перевод Java на Javascript - PullRequest
0 голосов
/ 26 ноября 2018


для аутентификации моего Node Server (Express JS) с другим API отдельный запрос должен быть отправлен в запросе POST.

Цитата из документации:

Вам необходимо отправить заголовок X-Authorization-Ahoi с этим запросом.Значением заголовка является закодированная строка JSON, которая состоит из <INSTALLATION_ID>, случайной 16-символьной строки в качестве одноразового номера и текущей даты в формате ISO 8601.

Пример из документации:

{
    "installationId":"<INSTALLATION_ID>",
    "nonce":"0wYWLarLDBrWU7B2I1Go4A==",
    "timestamp":"2018-11-01T11:32:44.413Z"
}

В документации API приведен следующий пример Java, который я пытаюсь воспроизвести в Javascript.

String installationId = <INSTALLATION_ID>;
// create nonce
byte[] nonce = new byte[16];
SecureRandom.getInstanceStrong().nextBytes(nonce);
String nonceBase64Enc = Base64.getEncoder().encodeToString(nonce);
// create timestamp
String timeStr = Instant.now().toString();
// create json string
String xAuthAhoiJson = String.format("{\"installationId\":\"%s\",\"nonce\":\"%s\",\"timestamp\":\"%s\"}",
                                        installationId, nonceBase64Enc, timeStr);
// encode encrypted header value
String XAUTH_AHOI_BASE64_URL_ENC = Base64.getUrlEncoder().withoutPadding()
                                         .encodeToString(xAuthAhoiJson.getBytes( StandardCharsets.UTF_8 ));

Вот что я пытался сделать:

const installationId = '<EXAMPLE_INSTALLATIONID>';

const nonce_tmp = crypto.randomBytes(16);
const nonce = nonce_tmp.toString('base64');

const date = new Date();
const timestamp = date.toISOString();

const  xAuthAhoiJson = JSON.stringify({installationId, nonce, timestamp});

const XAUTH_AHOI_BASE64_URL_ENC = base64url.encode(xAuthAhoiJson);

const url = 'https://banking-sandbox.starfinanz.de/auth/v1/oauth/token?grant_type=client_credentials';
        const options =  { headers: 
                          { 'Authorization': 'Basic ' + Buffer.from(credentials).toString('base64'),
                            'X-Authorization-Ahoi': XAUTH_AHOI_BASE64_URL_ENC }
                         };
request.post(url, options, function (e, r, b) { console.log(b); });

Для запроса POST я использую request-package .Для кодирования в Base64 URL Safe я использую base64url-пакет .При выполнении запроса POST я получаю следующее сообщение:

{
"timestamp": 1543229480764,
"status": 400,
"error": "Bad Request",
"message": "Nonce is invalid.",
"path": "/auth/v1/oauth/token"
}

Теперь мой вопрос: что не так с созданием моего Nonce и как я могу это исправить?Или это API, к которому я отправляю запрос POST?

1 Ответ

0 голосов
/ 26 ноября 2018

Вы просто забыли преобразовать nonceBase64Enc в строку.Вы сделали это в java, но не в javascript.

Просто добавьте .toString('hex'); в конце nonceBase64Enc

Пример: const nonceBase64Enc = Buffer.from (nonce,'base64'). toString ('hex');

Все готово!??

...