php – 如何在2个独立服务器之间创建共享密钥凭证代码系统?

鉴于此工作流程:

服务器A.

>用户进行身份验证.
>用户使用共享密钥购买随机生成的唯一优惠券代码,以使用服务器B上的应用程序.

服务器B.

>用户进行身份验证.
>用户输入优惠券代码.
>服务器B使用共享密钥验证代码是否合法
>服务器B授予对应用程序的访问权限.

我需要一种在PHP中实现函数generateVoucherCode和validateVoucherCode的方法,如下所示:

服务器A.

$voucher = generateVoucherCode("someSharedSecret");

服务器B.

$isValid = validateVoucherCode($userInputtedCode, "someSharedSecret");
if($isValid) {
    // allow access to application
}

最佳答案 通过共享秘密验证合法性是
HMACs的用途.您可以通过
hash_hmac在PHP中生成HMAC.您的工作流程将是:

>服务器A生成一次性代码(以您想要的任何方式)并计算其HMAC.该对代码HMAC作为凭证代码提供给用户.
>用户向服务器B提供凭证.
>服务器B隔离凭证中的一次性代码,并使用共享密钥独立计算其HMAC.如果计算出的HMAC与凭证中的HMAC匹配,则凭证是真实的.

凭证生成示例:

$secret = '$uper$ecret$tring';
$code = 'a pet unicorn';
$voucher = $code.'/'.hash_hmac('sha512', $code, $secret);

echo 'Your voucher is '.$voucher';

凭证验证示例:

$secret = '$uper$ecret$tring';
list ($code, $hmac) = explode('/', $voucher);
$verify_hmac = hash_hmac('sha512', $code, $secret);
if ($hmac === $verify_hmac) {
    echo 'Your voucher can be redeemed for '.$code';
}
else {
    echo 'Invalid voucher, sorry';
}
点赞