公開中のスマホアプリで、2020年1月24日(金)から、ログイン後に操作できない現象が起きています。
原因が分からず困っています。
- 同様の現象が起きたことはありますでしょうか?
- 解決策について何かご存知な事はありますでしょうか?
何かご存知であればぜひ教えていただきたいです。
アプリ&APIの仕様
スマホアプリは Monaca で作られています(Cordova 7.2)。
アプリ上では "monaca-jquery 2.0.3" のajaxで、APIにリクエストを投げています。
Web API はこのアプリのために独自実装したもので、ASP.NET MVC (C#) で作り、 Microsoft Azure (App Service) 上で稼働させています。
今回のアプリでは、ログイン処理成功時にCookie認証情報をAPIから返して、ログイン中は認証情報を使用します。
確認環境
複数の端末でログインテストしてみると、ログインに成功する/失敗する端末があることがわかりました。
ログインできなかった端末
- Pixel 3a (Android 10)
- Motorola Android 9
- Huawei Android 6
- iPhone SE (iOS 12.4)
ログインできた端末
- iPhone 6 Plus (iOS 10.2.1)
※AndroidのWebViewはいずれも最新版
現象の詳細
アプリではログイン成功直後にユーザープロフィールを取得する処理をしています。
調べたところ、ログイン処理は成功しているのですが、その後のユーザープロフィール取得処理で 401 Unauthorized が返ってきます。
status: 401 statusText: Unauthorized Message: Authorization has been denied for the request.
Web API (C#) ではログイン処理の最後に以下のコードで、Cookieに認証情報を設定しています。
C#
1FormsAuthentication.SetAuthCookie(user.user_id, true);
以下の事を試しましたが、改善はありませんでした。
- Cordova を 7.2 から 9.0 にアップデート
- jQuery を 2.0.3 から 3.4.1 に変更
追記: 2020/01/29(水) 11:00
"Charles Proxy" (https://www.charlesproxy.com/) を使って、アプリの通信をトラックしてみました。
また、同じAPIをWeb上でたたくとエラーなしに動作するため、Webでの通信もトラックしました。
▽Web上でAPIをたたいた時
WebでAPIをたたいた時は、ログインも、その直後のユーザープロフィール取得も成功しました。
ログイン成功するとresponseに
Cookie: ARRAffinity=xxxx Set-Cookie: .ASPXAUTH=yyyy; .ASPXAUTH=yyyy; expires=Tue, 28-Jan-2020 08:21:57 GMT; path=/; HttpOnly; SameSite=Lax
が含まれています。
ユーザープロフィール取得ではリクエストHeadersに
Cookie: ARRAffinity=xxxx; .ASPXAUTH=yyyy
となっていて、レスポンスを受け取ることも成功しています。
▽アプリ上からAPIをたたいた時
一方、アプリ上では、ログイン処理のレスポンスに
Cookie: ARRAffinity=xxxx Set-Cookie: .ASPXAUTH=yyyy; expires=Tue, 28-Jan-2020 08:49:09 GMT; path=/; HttpOnly; SameSite=Lax
両方ともふくまれていますが、
ユーザープロフィール取得では
Cookie: ARRAffinity=xxxx;
となっており、「.ASPXAUTH=yyyy」がありません。
APIの処理が失敗するのはこのためと考えられます。
しかしながら、リクエストはWeb/アプリどちらも同じ手法 (jQuery 3.4.1 の ajax) を使っています。
以上です。よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。