Я разрабатываю проект с приложением (expo response native) и сервером Laravel 5.1, используя oauth2-server
.
Теперь мне нужно отправить заголовок авторизации в формате
Mac id="access_token" ts="timestamp" nonce="random_string" mac="signature"
MyПроблема в том, что signature
не совпадает с вычисленной подписью от oauth-сервера.Я также сравнил все необходимые части подписи (запрос URI, хост и порт).Они совпадают
Я пытаюсь сгенерировать закодированный base64 с crypto-js
.Строка результата должна совпадать с результатом hash_hmac()
в PHP.Ниже приведен пример
$phpString = base64_encode(
hash_hmac(
'sha256', 'ANY STRING', 'HMAC HASH KEY', true
)
);
// Result: cOeqRLpcqCUyluyY/Y4yROM+5upAr0dFzrSLU/m8qhY=
В моем скрипте JS с crypto-js
import CryptoJS from 'crypto-js';
import Base64 from 'crypto-js/enc-base64';
const jsString = Base64.stringify(
CryptoJS.HmacSHA256('ANY STRING', 'HMAC HASH KEY').toString(CryptoJS.enc.Hex)
);
// 70e7aa44ba5ca8253296ec98fd8e3244e33ee6ea40af4745ceb48b53f9bcaa16
// It is seems not a valid base64 string
Я также пытался с некоторыми другими сценариями, и он не работал
const jsString = CryptoJS.HmacSHA256('ANY STRING', 'HMAC HASH KEY').toString(CryptoJS.enc.Base64);
// cOeqRLpcqCUyluyY/Y4yROM+5upAr0dFzrSLU/m8qhY=
Два результата совершенно разные.Что я не так в сценарии JS?