在 public REST 上下文中以 symfony 的形式处理 CSRF 令牌
handling the The CSRF token in symfony's forms when in public REST context
我正在开发我的第一个 symfony (3) 应用程序。它是一个 REST 服务,可公开访问。
我正在使用 FOSRestBundle 执行此操作。
我迟早要添加一些管理表单,我可能想直接创建它们(不通过使用我自己的网络服务的额外工作)
我想知道在这种情况下如何处理 CSRF 令牌。我看到了不同的解决方案:
- 全局停用 CSRF 令牌:我不想这样做
- 创建两组表单,一组激活令牌:形成我的管理表单,另一组用于 REST API。 => 在这种情况下,其余 API 不能有后备 _format=html
- 想办法给 api 消费者一个授权,使用 API_GROUP,并禁用该组的令牌
- 在我看来这是最好的解决方案,但我不知道如何透明地做到这一点,既不影响我未来管理员的身份验证,也不需要在 REST 请求中提供凭据。
- 使用事件侦听器来破解 symfony 的身份验证机制,并在调用 REST 时提供身份验证 API(除了 _format=html)
您认为这个(或其他)解决方案中的哪一个最好,您将如何编码?
我找到了一种方法,也许不是最好的方法,但它很有效:
$_format = $request->attributes->get('_format');
if ('html' == $_format) {
$form = $this->createForm(ItopInstanceUserType::class, $itopInstanceUser);
} else {
$form = $this->createForm(ItopInstanceUserType::class, $itopInstanceUser, ['csrf_protection' => false]);
}
对于我来说,忘记自己管理的CSRF令牌,检查Oauth认证等主题。
看这里:https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/index.md
FOSOAuthServerBundle 与 FOSRestBundle 完美配合。
我正在开发我的第一个 symfony (3) 应用程序。它是一个 REST 服务,可公开访问。 我正在使用 FOSRestBundle 执行此操作。 我迟早要添加一些管理表单,我可能想直接创建它们(不通过使用我自己的网络服务的额外工作)
我想知道在这种情况下如何处理 CSRF 令牌。我看到了不同的解决方案:
- 全局停用 CSRF 令牌:我不想这样做
- 创建两组表单,一组激活令牌:形成我的管理表单,另一组用于 REST API。 => 在这种情况下,其余 API 不能有后备 _format=html
- 想办法给 api 消费者一个授权,使用 API_GROUP,并禁用该组的令牌
- 在我看来这是最好的解决方案,但我不知道如何透明地做到这一点,既不影响我未来管理员的身份验证,也不需要在 REST 请求中提供凭据。
- 使用事件侦听器来破解 symfony 的身份验证机制,并在调用 REST 时提供身份验证 API(除了 _format=html)
您认为这个(或其他)解决方案中的哪一个最好,您将如何编码?
我找到了一种方法,也许不是最好的方法,但它很有效:
$_format = $request->attributes->get('_format');
if ('html' == $_format) {
$form = $this->createForm(ItopInstanceUserType::class, $itopInstanceUser);
} else {
$form = $this->createForm(ItopInstanceUserType::class, $itopInstanceUser, ['csrf_protection' => false]);
}
对于我来说,忘记自己管理的CSRF令牌,检查Oauth认证等主题。
看这里:https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/index.md
FOSOAuthServerBundle 与 FOSRestBundle 完美配合。