質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

Q&A

解決済

2回答

4187閲覧

[Monaca] Web APIリクエスト時にCookie認証情報が渡されない

KoichiAkamine

総合スコア30

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

0グッド

1クリップ

投稿2020/01/28 00:13

編集2020/01/29 11:16

公開中のスマホアプリで、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) を使っています。


以上です。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決しました! ので報告させていただきます。

原因はアプリではなく、サーバサイドにありました。

Announcement: SameSite Cookie Handling and .NET Framework 4.7.2 Patch Availability on Azure App Service - Microsoft Q&A (Preview)
https://docs.microsoft.com/answers/questions/6842/announcement-samesite-cookie-handling-and-net-fram.html

先月行われた Azure のアップデートに伴い、Cookie の処理を改修する必要があったのに、改修しておらず、そのためCookieが正常に作動しなくなりました。
上記ページに書かれた改修を行ったところ、正常に稼働するようになりました。

今回の件でスマホアプリはアップデートしていません。

11月にアナウンスが発表されていたものの見逃していたため、今回の問題が起きてしまいました。。。
今後はクラウド側のアップデートを注意深くチェックします。

投稿2020/02/06 05:26

KoichiAkamine

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

貴重な情報ありがとうございます! 
Samesiteの問題は(Monacaに限らず)要注意ですね

(すみません、コメントと間違えて、回答になってしまいました。)

投稿2020/03/26 02:08

編集2020/03/26 02:13
KNaito

総合スコア376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問