我正在尝试创建一个“服务”之类的应用程序,该应用程序能够接收来自其他服务的API调用。 (将为不同的目的构建这些服务)。并且还能够将API调用发送到另一个。
他们发送并接受的每个请求都必须采用以下格式。
what
我想向每个请求附加一个散列,该散列是从实际请求生成的,或者以任何方式(使用密码或添加的任何魔术方法加盐处理)。目前还不那么重要。我给这个字段起了{
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这样的功能性中间件?
答案 0 :(得分:0)
不要将标头放入HTTP主体的JSON对象中,而是直接使用HTTP标头。那就是他们的目的。当您使用非标准标头时,请给它们加上@echo off
SetLocal EnableDelayedExpansion
set REVISION=HEAD
set count=0
for /F "tokens=*" %%m in ('git diff-tree --no-commit-id --name-only -r %REVISION%') do (
set /a count=!count!+1
set var!count!=%%m
)
for /L %%i in (1, 1, %count%) do (
echo %%i: !var%%i!
)
前缀,并为您的应用程序添加前缀,例如X-
。该请求进入正文,即您示例中的X-YourApp-Signature
属性的值。
使用Symfony,服务器端非常简单:
request
如果要用PHP编写HTTP客户端应用程序,建议使用Guzzle库。这是一个示例:
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.)
}
当然,您还需要实现一些错误处理等(HTTP状态> = 400),因此在实际的应用程序中代码会更加复杂。
答案 1 :(得分:0)
正如k0pernikus所述,before after filters解决了我的问题。