我正在使用oauth2-server
通过一个应用(expo react native)和一个服务器Laravel 5.1开发一个项目。
现在,我需要使用格式发送授权标头
Mac id="access_token" ts="timestamp" nonce="random_string" mac="signature"
我的问题是signature
与来自oauth-server的计算出的签名不匹配。我还比较了签字的所有必要部分(请求URI,主机和端口)。它们是匹配的
我正在尝试使用crypto-js
生成编码的base64。结果字符串必须与PHP中hash_hmac()
的结果相等。以下是示例
$phpString = base64_encode(
hash_hmac(
'sha256', 'ANY STRING', 'HMAC HASH KEY', true
)
);
// Result: cOeqRLpcqCUyluyY/Y4yROM+5upAr0dFzrSLU/m8qhY=
在我的带有crypto-js
的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脚本有什么问题?