XSRF対策がされているRESTful APIに対して、Postmanでテストしていたが、つい先日まで問題なかったにも関わらず挙動がおかしくなった。
具体的には、SAP API Business Hubにて公開されているAPIのSAP Cloud Platform Workflowを試していて、問題に遭遇。SAP Marketing Cloud (旧SAP Hybris Marketing Cloud) について試しても同じ問題を確認。
さて、何が原因???
原因と解決方法
結論から言うとPostman 6.1.3の不具合・バグの模様。
Postman Canaryを利用すれば問題解決するので、何かおかしいと思った人は何も考えずにまずはPostman Canaryを試してみると良い。
トラブルシュート
ちなみに私はこのトラブルシュートのために時間を費やすことになった。
うまく動いていた時と問題が発生しはじめた後でWeb API Callは何も変えていない。OSもブラウザも同じ。Postmanの各種ヘッダオプションもいじってみたが何も好転しない。
実は先週の段階で他の方からこの問題のことをは聞いていて、Web APIスクリプトを送ってもらったが再現しなかったため、原因不明としていた。
しかし問題が発生するようになった。
他に何を変えたのか?
Postman 6.1.3へのアップデートが原因
そういえば、Postmanのアップデート通知が何度もきていたが、更新は後回しにしていた。そして、先週末に重い腰をあげてアップデートしたことを思い出した。
問題が発生する前はかなり前のバージョン。
問題が発生した時には6.1.3を利用していた。
原因がPostmanそのものにある可能性を疑い、検索。ふたつレポートを発見。まさにこれが同じ問題だと思われる。
- https://github.com/postmanlabs/postman-app-support/issues/4606
- https://github.com/postmanlabs/postman-app-support/issues/4581#issuecomment-393182451
どうやらPostmanクライアントからAPI側に送信する際のヘッダのCookieの取り扱いに問題があり、それが原因で”X-CSRF-Token”:”Fetch”として取得する値が毎回可変し、2回目以降のコールのヘッダにセットしてもマッチしないのでエラーとなる模様。
Postman 6.1.3での”X-CSRF-Token”:”Fetch”の結果 – 毎回 X-CSRF-Tokenの値が異なる
Postman Canary (June 22, 2018)での”X-CSRF-Token”:”Fetch”の結果 – X-CSRF-Tokenの値は毎回変わらない
結論としてPostman 6.1.3が使えない。解決方法は二つ
- 古いバージョンのPostmanにダウングレードする
- Postman Canary (βバージョン) を利用する
Postman Canaryはリリース版のPostmanと併用して利用できるので、私はその方法で対応。Postmanに設定したスクリプトをエクスポートして、Postman Canaryにインポートして対応。