簡體   English   中英

在公共 REST 上下文中處理 symfony 表單中的 CSRF 令牌

[英]handling the The CSRF token in symfony's forms when in public REST context

我是我的第一個 symfony (3) 應用程序的開發者。 它是一種可公開訪問REST 服務 我正在使用 FOSRestBundle 執行此操作。 我遲早要添加一些管理表單,我可能想直接創建它們(不通過使用我自己的 Web 服務的額外工作)

我想知道在這種情況下如何處理 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 完美配合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM