在这个例子中,我们的客户端将使用OpenSSL来签署数据,然后再将其发送到服务器。当服务器收到数据时,它将使用OpenSSL来检查它是否用给定的签名签署过。如果验证成功,那么客户端就被认为是值得信赖的。在这个过程中,客户使用他的 "私钥",服务器使用客户的 "公钥 "进行验证。请看更多关于签署HTTP消息、openssl_sign和openssl_verify的信息。
流程
类别
签名控制器(SignatureController
我在这里非常懒惰,在控制器中做了太多的事情,但这纯粹是因为我想让帖子尽可能的简短。你可以把逻辑移到一个服务类中--只是一个例子。
namespace App\Controller;
services:
-
/client/create-keys- 使用这个端点,以编程方式创建客户的公钥和私钥。然后把私钥给客户,公钥给服务器。**注意:**我添加这个端点只是为了演示,所以你不应该在现实世界中这样做。相反,在终端创建这些密钥。 -
/client/create-signature- 使用这个端点来签署你的数据。这个端点的响应将包含签名,它将和实际数据一起被发送到服务器。**注意:**假设这个端点是在客户端API中。 -
/server/verify-signature- 当客户端发送请求时,它将在这里登陆,签名验证在这里进行。**注:**假设这个端点是在服务器API中。
签章工具(SignatureUtil
请阅读代码中的注释。
namespace App\Util;
测试
创建客户端密钥
$ ls -l config/ssl/
创建签名
$ curl -X POST \
消耗API
在X-Signature header中使用签名。
$ curl -X POST \