交响乐 |认证请求
Symfony | Authenticate request
我正在尝试创建一个类似于 "service" 的应用程序,它可以接收来自其他服务的 API 调用。 (这些服务将被构建,用于不同的目的)。并且还能够将 API 呼叫发送给另一个呼叫。
他们发送和接受的每个请求都必须采用以下格式。
{
header : {
// some header information, like locale, currency code etc.
signature : "some-hashed-data-using-the-whole-request"
},
request : {
// the usable business data
}
}
我想为每个请求附加一个哈希值,该哈希值是从实际请求或无论如何生成的(添加了密码或任何类型的魔法)。目前不是那么重要。我给这个字段起名为 signature
。因此,对于每个收到的请求,我想从请求中重现此 signature
。如果我收到的 signature
与我生成的匹配,我让应用程序 运行 否则显示一些错误消息。
我已经阅读了几篇文章,但其中大部分是关于用户密码组合的。
我的问题不是关于它是否是一个好的解决方案。我只想知道如何在 Symfony 4 中实现类似功能的中间件 - 如 laravel -?
与其将 headers 放入 JSON object HTTP body,不如直接使用 HTTP headers。这就是他们的目的。当您使用 non-standard headers 时,请为它们添加前缀 X-
并且可能是您的应用程序的前缀,例如 X-YourApp-Signature
。请求进入 body,即您示例中 request
属性 的值。
服务器端使用 Symfony 非常简单:
public function someAction(Request $request)
{
$signature = $request->headers->get("X-YourApp-Signature");
$data = json_decode($request->getContent());
// ... go on processing the received values (validation etc.)
}
如果您想在 PHP 中编写 HTTP 客户端应用程序,我建议您使用 Guzzle 库。这是一个例子:
$headers = ["X-YourApp-Signature" => "your_signature_string"];
$data = json_encode(["foo" => "bar"]);
$request = new \GuzzleHttp\Psr7\Request("POST", "https://example.com", $headers, $data);
$client = new \GuzzleHttp\Client();
$response = $client->send($request, ["timeout" => 10]);
var_dump($response);
当然,您还需要实现一些错误处理等(HTTP 状态 >= 400),因此在实际应用中代码会稍微复杂一些。
正如 k0pernikus 提到的,before after filters 解决了我的问题。
我正在尝试创建一个类似于 "service" 的应用程序,它可以接收来自其他服务的 API 调用。 (这些服务将被构建,用于不同的目的)。并且还能够将 API 呼叫发送给另一个呼叫。
他们发送和接受的每个请求都必须采用以下格式。
{
header : {
// some header information, like locale, currency code etc.
signature : "some-hashed-data-using-the-whole-request"
},
request : {
// the usable business data
}
}
我想为每个请求附加一个哈希值,该哈希值是从实际请求或无论如何生成的(添加了密码或任何类型的魔法)。目前不是那么重要。我给这个字段起名为 signature
。因此,对于每个收到的请求,我想从请求中重现此 signature
。如果我收到的 signature
与我生成的匹配,我让应用程序 运行 否则显示一些错误消息。
我已经阅读了几篇文章,但其中大部分是关于用户密码组合的。
我的问题不是关于它是否是一个好的解决方案。我只想知道如何在 Symfony 4 中实现类似功能的中间件 - 如 laravel -?
与其将 headers 放入 JSON object HTTP body,不如直接使用 HTTP headers。这就是他们的目的。当您使用 non-standard headers 时,请为它们添加前缀 X-
并且可能是您的应用程序的前缀,例如 X-YourApp-Signature
。请求进入 body,即您示例中 request
属性 的值。
服务器端使用 Symfony 非常简单:
public function someAction(Request $request)
{
$signature = $request->headers->get("X-YourApp-Signature");
$data = json_decode($request->getContent());
// ... go on processing the received values (validation etc.)
}
如果您想在 PHP 中编写 HTTP 客户端应用程序,我建议您使用 Guzzle 库。这是一个例子:
$headers = ["X-YourApp-Signature" => "your_signature_string"];
$data = json_encode(["foo" => "bar"]);
$request = new \GuzzleHttp\Psr7\Request("POST", "https://example.com", $headers, $data);
$client = new \GuzzleHttp\Client();
$response = $client->send($request, ["timeout" => 10]);
var_dump($response);
当然,您还需要实现一些错误处理等(HTTP 状态 >= 400),因此在实际应用中代码会稍微复杂一些。
正如 k0pernikus 提到的,before after filters 解决了我的问题。