Symfony |验证请求

时间:2018-08-10 05:57:20

标签: php symfony security authentication symfony4

我正在尝试创建一个“服务”之类的应用程序,该应用程序能够接收来自其他服务的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这样的功能性中间件?

2 个答案:

答案 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解决了我的问题。