外部APIへの連携でCookieが保存されない問題への対処

何を実現したいのかを書きましょう

kintoneと外部サービス(名前は伏せます)のAPIと連携をカスタマイズで行おうとしています。

外部APIでは初回POST時にヘッダにAuthorizationトークンを埋め込むと、認証が行われset-cookieにセッションIDが含まれてレスポンスされます。

以降のリクエストではCookieをのせることで認証が行われる仕組みとなっています。

発生した問題やエラーメッセージを具体的に書きましょう

axiosでpostしているのですが、外部APIから返ってくるset-cookieがブラウザのcookieに保存されず、トークンをセットしないリクエストで401がレスポンスされてしまいます。

Chrome開発者ツールのCookieを見ると「このset-cookieはSameSiteが設定されておらず、SameSite=luxがデフォルトで設定されました…」と表示されました。

別ドメインでPOSTなどのリクエストは、サーバー側でレスポンスにSameSite=None;Security;でないとCookieは保存されないのでしょうか?

外部サービスのAPIのためSameSiteをNoneにしてもらうのは難しいかなと考えています。

回避策としては下記を考えていますが、それが正しいかもご教示いただけると幸いです。別の策があればいただけるととても助かります。

kintoneと外部サービスAPIの間に中間サーバを建てる。(Node.jsやPHP,Rubyなど)

流れとしては下記をイメージしています。

kintoneから中間サーバにapiリクエスト

中間サーバから外部サービスAPIにHttpリクエスト
(例:PHPであればGuzzleなど)

外部サービスAPIから中間サーバにレスポンス

中間サーバからkintoneにレスポンス

よろしくお願いいたします。

基本的に外部サーバーやサービスとやりとりする際はproxyを利用することになります

(ブラウザからAPIを叩くっていうこと自体がセキュリティ上良しとされないため、CORSであったり制限が入る傾向にあります)

もちろん中間サーバーをたてるのもありですね、proxy使うか、と合わせてその2択になるかなぁとおもいます

ご回答誠にありがとうございます。

kintone.proxyを使用してみましたが、初回post時はheaderにアクセストークンをのせるので正常なレスポンスが返ってきます(これはaxiosやfetchなどでも同じ)

そのまま続けてputやpostすると、kintone.proxyを使用しても外部APIからは401 Authenticatedエラーが返ってきます。

(言葉が間違っているかもしれませんが)kintone.proxyを複数回実行するときに、それぞれ別のクライアントとして外部APIにリクエストを投げるから、初回のPOST時に返ってきたset-cookieのセッションクッキーが保持されず、Cookie(セッション)認証で弾かれるのかなと考えています。

上記の考えについては認識正しいでしょうか?

中間サーバの方はローカルでLaravelから外部APIとやり取りができたので、問題はなさそうでした。

中間サーバを建てるとなるとサーバー費用が発生するので、なんとかkintoneで収まるようにと思うのですが、なかなか難しそうですね、、

すいません、ここらへん見落としてました
たしかに、そのような仕組みのAPIですと、認識の通り厳しそうにみえますね…

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。