web-dev-qa-db-ja.com

カスタムサービスでCSRF検証に失敗した問題!

データベースに注文レコードを保存するカスタムサービスAPIを作成しました。 POSTMANを確認したところ、問題なく動作しています。しかし、アプリからリクエストすると、「CSRF検証に失敗しました」という問題が発生します。

私は何かを逃していますか?

2
DRUPWAY

POSTMANでは、API呼び出しでX-CSRF-Tokenを送信する必要がありますが、APPからAPI呼び出しを実行しているときに、X-CSRF-Tokenが欠落している可能性があります。セッション認証を有効にしている場合は、X-CSRFトークンが必要です。簡単なテストを行うには、drupal admin endのサービス構成ページでセッション認証を無効にしてから、API呼び出しを実行してください。

ただし、適切な修正は、X-CSRF-Tokenを提供する別のAPIを用意し、X-CSRF-TokenとともにAPI呼び出しを行うことです。

5
arpitr

ワークフローの手順を確認できます

最初ログインの時間

  • CSRFトークンPOSTを取得するPOST/services/session/token
  • myendpoint/system/connect with X-CSRF-Token header IF not not Logged In
  • ログインしてみてください/ myendpoint/user/loginログイン成功
  • session_name = sessionid in Cookie Varible

今後のリリース

  • CSRFトークンを取得するための/ services/session/tokenのPOST
  • 以前に保存したsession_name = sessionidをCookieヘッダーとしてX-CSRF-Tokenヘッダーと一緒にPOST myendpoint/system/connect

新しいCSRFトークンを要求しないでください。前の要求で返されたトークンを使用してください。これは、返された結果のtokenという名前のキーにあります。新しいcsrfCSRFトークンを初めてリクエストするだけです。

ユーザープロフィールのリクエストの例を次に示します。

{
  "method": "POST",
  "url": "http://HOSTNAME/SERVICE_PATH/user/profile",
  "headers": {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Connection": "keep-alive",
    "X-CSRF-Token": "MHT4hmagxHgf0lOYlkENGlTZGk2AZ96G3p3ZCCc2kvo",
    "Cookie": "SESSb4d5ba755bb4eb727d982993490e6681=waroHcB4h8rbU0yhZjh-zGLAquZYlpayC_kB38gx--I"
  }
}
7
visabhishek