何を実現したいのかを書きましょう
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にレスポンス
よろしくお願いいたします。
mura
2
基本的に外部サーバーやサービスとやりとりする際は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で収まるようにと思うのですが、なかなか難しそうですね、、
mura
4
すいません、ここらへん見落としてました
たしかに、そのような仕組みのAPIですと、認識の通り厳しそうにみえますね…
system
(system)
Closed
5
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。