背景
2021年11月以降、AndroidアプリのAPIレベルを30以上に対応させる必要があります。
漏れなく対応に追われていたのですが、APIレベル29から30に上げたとたん、アプリの認証処理が失敗するようになったのでその調査の備忘録です。
調査
認証系なのでcookie周りが怪しい…。
取り敢えずAndroid developerの変更内容を読んでいたのですが、cookie周りの取り回しが変更されたとかは見つかりませんでした。
Android 10(API レベル 29)から Android 11(API レベル 30)に移行する
仕方なしにアプリの実装を追いかけて、API29とAPI30で何が違うのか追っかけてみたところ
CookieManagerのsetCookieにてsecure属性が付与された項目がAPI30ではrequestに乗っかっていませんでした。
なじぇ…と思いながらドキュメントを見に行くと、何か気になることが書いてありました。
Note: if specifying a value containing the "Secure" attribute, url must use the "https://" scheme.
これじゃん。
Cookieを設定するURLの先頭に"https://"を設定するようにすることで無事requestにsecure属性の値が設定されるようになりました。
結論
API30に上げると、cookieにsecure属性の項目値が設定されなくなった。
CookieManagerのsetCookieにてsecure属性が設定される項目が、"https://"をつけることで対応できた。
というかなぜAPI29までは動いていて、何でAPI30からいきなり動かなくなったのでしょうか・・・。
過去どこかで宣言されていたのかな。現在調査中です。
もし原因や経緯をご存じの方がいれば教えて頂けますと喜びます。
本記事が同じような現象で困っている方の参考になれば幸いです。
2021年9月8日追記
下記ブログ内で、以下のような説明が引用されていた。
SameSite属性どころか、HTTP自体がダメになってた件(Cookie)
Chrome 80が密かに呼び寄せる地獄
~ SameSite属性のデフォルト変更を調べてみた - Qiita
https://qiita.com/ahera/items/0c8276da6b0bed2b580c#none
「【追記】なおChrome 80以降でSecure属性を付けずSameSite=Noneを指定した場合、set-cookie自体が無効になります。」
あとこっちか。
[Chrome Platform Status](Feature: Reject insecure SameSite=None cookies)
Deprecate and remove the use of cookies with the SameSite=None attribute but without the Secure attribute. Any cookie that requests SameSite=None but is not marked Secure will be rejected.
この辺の現象に近いような気がします。
が、API29→API30に変えただけで、「SameSite=None」が指定されるようになるのか?とかは相変わらず不明です。
Android12のAPI31についての変更点のドキュメントだとSameSiteについてちょっと触れられているけど…。
引き続き調査中。