

Railsでログイン機能を実装しています。

認証のエンドポイントで `Set-Cookie` response header を付与していますが 「ユーザ設定によりブロックされました」という警告が出て
cookie が保存されません。

画像の通り cookie, path, Secure属性, SameSite属性を付与しています。

[![ユーザ設定によりブロックされた画像](https://i.stack.imgur.com/86bX4.jpg)](https://i.stack.imgur.com/86bX4.jpg)

chrome
の設定が「シークレットモードでサードパーティのCookieをブロックする」になっていたため、「Cookieを全て受け入れる」に変更したところ、問題なく
cookie がセットされることを確認しました。

[![シークレット](https://i.stack.imgur.com/RAS9q.png)](https://i.stack.imgur.com/RAS9q.png)  
から、下記に変更  
[![全てのcookie](https://i.stack.imgur.com/9Nizp.png)](https://i.stack.imgur.com/9Nizp.png)

デフォルトの設定は「シークレットモードでサードパーティのCookieをブロックする」 であるため、この設定のままでも cookie
がセットされるようにしたいと思っています。

これを実現するために何か手立てありましたらご助言いただきたいです。

環境

  * Mac OS Big Sur 11.5.2(M1)
  * Google Chrome 103.0.5060.53（Official Build） （arm64）

SP

  * iPhone12 iOS 15.5
  * Chrome 103.0.5060.63

シーケンス図  
[![処理のフロー](https://i.stack.imgur.com/qomBD.png)](https://i.stack.imgur.com/qomBD.png)

* * *

※ **追記**  
サードパーティーの cookie
として判定されているのはフロントを別会社、サーバーを自分がホストしていることによって、同じDNSサーバーで運用できない点が原因かと考えています。  
参考: <https://blog.cloud-acct.com/posts/u-nuxt-rails-safari-cookies/>

\---  
**※※追記**  
複数の Chrome で確認したところ、 Cookie がセットされるバージョンとされないバージョンがあるようです。

  * セットされる: 103.0.5060.114（Official Build） （x86_64）
  * セットされない: 103.0.5060.53（Official Build） （arm64）


CC BY-SA 4.0
2022-07-11T14:37:35.407
89919
2022-07-13T02:10:26.620
2022-07-13T02:10:26.620
42226
42226
question
ruby-on-rails google-chrome cookie
Set-Cookie Response Header がユーザ設定によりブロックされる


以下の図（質問者さんが質問に追加した画像にユーザーを追加しました）の構成になっていて、バックエンドからの「認証 OK なら Set-Cookie・・・」の
Cookie はサードパーティ製と見なされてブラウザの設定で拒否されるのが問題と理解しました。

[![システム構成](https://i.stack.imgur.com/2W7RO.jpg)](https://i.stack.imgur.com/2W7RO.jpg)

何故シークレットモードを使うのか解せませんが、そういう決まりになっているのだろうと理解して・・・

> デフォルトの設定は「シークレットモードでサードパーティのCookieをブロックする」 であるため、この設定のままでも cookie
> がセットされるようにしたいと思っています。これを実現するために何か手立てありましたらご助言いただきたいです。

上の図の構成のままですと手立ては無いと思います。

ユーザーにブラウザの Cookie の設定を「Cookie
を全て受け入れる」に変更してもらうのが唯一の解決策だと思いますが、それは許されないのでしょうから、自分が考え付くのは:

(1)
上の図の「フロント」からの応答のところで「バックエンド」にリダイレクトし、ユーザーからはファーストパーティとして「バックエンド」に要求を出し、「バックエンド」からファーストパーティ
Cookie として受け取る。

(2) Cookie ベースの認証はやめて、トークンベースの認証に替える。

・・・ぐらいです。


CC BY-SA 4.0
2022-07-13T01:37:22.667
89944
2022-07-13T01:37:22.667
51338
89919
answer