質問するログイン新規登録

Q&A

1回答

2496閲覧

【monaca】cookieを保存できない

退会済みユーザー

退会済みユーザー

総合スコア0

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Monaca

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

0グッド

1クリップ

投稿2021/08/10 00:33

編集2021/08/10 04:14

0

1

前提・実現したいこと

monacaでアプリを開発しています。ログイン認証するAPIから受け取ったcookieを別のAPIコール時に付加することができず困っています。

具体的にやりたいことは、
1.アプリのログイン画面で入力したID,パスワードをAPIに送信する。
2.APIは受信したID,パスワードを検証し問題なければcookie(認証用)を返す。
3.アプリはcookie(認証用)を保存する。
4.アプリの記事登録画面で入力した情報を、保存しているcookie(認証用)と共にAPIに送信する。
5.APIは受信したcookie(認証用)を検証し問題なければ記事登録を行う。
です。

質問は下記2点です。

  • monacaアプリでcookieを使用することはできるのでしょうか?ここ数日試行錯誤しているのですが解決しません。そもそもmonacaアプリでcookieは使用できるのか、と疑問に思った次第です。monacaアプリでcookieを登録するのではなく、APIからのcookie(サードパーティクッキー?)が使用できるのか、が知りたいです。

  • monacaアプリでcookieを使用することができる場合、どのような手続きが必要なのでしょうか?①axiosのオプションでwithCredentials: trueを設定する、②cookieにSameSite=None、Secure=trueの属性を付ける、以外に何かございましたらご教授いただきたいです。

【環境】
API側: Azure、IIS、ASP.NET
アプリ側: monaca、react、onsenui、axios、cordova10.0.0

発生している問題・エラーメッセージ

5でAPIがHTTPステータスコード401を返してしまいます。つまり4でcookie(認証用)がAPIに送信されていません。
さらに下記の理由からそもそも3でcookieが保存されていないのではないかと推測しました。

  • 2のAPI側でcookie(認証用)が返されていることを確認済み。
  • 4のAPI側でcookie(認証用)が付加されていないことを確認済み。
  • localkit(または同様の機能を実装したWEBアプリ)では問題なくcookie(認証用)がアプリ側に保存されAPIに送信されています。

実機(iPhone8 iOS14.7.1)で上記問題が発生します。

該当のソースコード

ログインAPIを呼び出すコードは下記です。このAPIは正常終了します。

javascript

1 axios.post("https://aaabbbccc.com/api/login", {id: '99999', pw: '123456'}, {withCredentials: true}) 2 .then((response) => { 3 // 正常終了 4 if(response.status == 200){ 5 } 6 }) 7 .catch((error) => { 8 // エラー 9 if (error.response) { 10 if (error.response.status == 401) { 11 } 12 else { 13 } 14 } else if (error.request) { 15 } else { 16 } 17 }); 18

記事登録APIを呼び出すコードです。このAPIは401で返ってきます。

javascript

1 axios.post("https://aaabbbccc.com/api/article", {content: 'あいうえお'}, {withCredentials: true}) 2 .then((response) => { 3 // 正常終了 4 if(response.status == 200){ 5 } 6 }) 7 .catch((error) => { 8 // エラー 9 if (error.response) { 10 if (error.response.status == 401) { 11 alert('認証されていません'); 12 } 13 else { 14 } 15 } else if (error.request) { 16 } else { 17 } 18 }); 19

試したこと

下記を参照しAPI側のcookieにSameSite=None、Secure=trueが設定されるようにしました。
[Monaca] Web APIリクエスト時にCookie認証情報が渡されない

また、IIS側に下記設定を追加しました。
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:monaca-app://monaca.io   ← config.xmlに設定したもの

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

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

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

退会済みユーザー

退会済みユーザー

2021/08/10 01:11 編集

認証にベアラトークンでなくてクッキーを使っているのですか? クッキーを使うのはセキュリティ上非推奨なのですが良いのですか? 後でベアラトークンを使うことに方針変更するなんて話になると時間の無駄なので聞いてます。 クッキーを使っての認証システムは ASP.NET Identity 利用ですか? もし独自実装だとすると、第三者には詳細は分からないので、ここで聞いても話が通じないかもしれません。
退会済みユーザー

退会済みユーザー

2021/08/10 03:58

返信ありがとうございます。ASP.NET Identityを使用しています。今回はセキュリティを重視せずこのままクッキーの前提でお願いします。
退会済みユーザー

退会済みユーザー

2021/08/11 00:09 編集

ここのコメントは解答欄に移動しました。
退会済みユーザー

退会済みユーザー

2021/08/11 22:48

質問者さん、無言ですが、回答したのでそれに対するフィードバックを書こう。役に立った、立たなかったぐらいはすぐ返せるのでは? 役に立たなかったならどこがダメだったのかを書くとより期待する回答に近いものが出てくるかも。とにかく無言は NG です。
退会済みユーザー

退会済みユーザー

2021/08/13 02:34

回答のコメント欄の質問者さんの 2021/08/12 11:04 のコメントにレスしているので、それに対するフィードバックを書いてください。
guest

この質問の投稿者はすでに退会しているため、質問者からの返信がない点にご留意ください。

回答1件

0

実機(iPhone8 iOS14.7.1)で上記問題が発生します。

以下の記事に書いてある「2016 年の IETF による Cookie の SameSite 属性に関するドラフト標準に則ったブラウザー (iOS12 の Safari 等) では None の値が認識できず、認識できない値は Strict として処理するようになっています」ということなのかもしれませんね(想像です)。そのあたりを調べてみてはいかがですか?

ASP.NET における SameSite Cookie について
https://jpdsi.github.io/blog/web-apps/aspdotnet-samesitecookie/

投稿2021/08/11 00:07

退会済みユーザー

退会済みユーザー

総合スコア0

退会済みユーザー

退会済みユーザー

2021/08/12 02:04

ご回答ありがとうございます。おっしゃる通りです。 確かにいただいたリンクの問題があり対応が必要ですが 質問文のリンクからたどっていったサイトにその対応方法が含まれており、私も対応済みです。 ちなみに下記のサンプルがその対応です。 https://github.com/blowdart/AspNetSameSiteSamples 早急な回答いただいたにも関わらず、返信遅くなり申し訳ございません。
退会済みユーザー

退会済みユーザー

2021/08/12 02:26

> 質問文のリンクからたどっていったサイトにその対応方法が含まれており、私も対応済みです。 それは質問に書いてあった、 > 下記を参照しAPI側のcookieにSameSite=None、Secure=trueが設定されるようにしました。 のこと、即ちサーバーサイドの話だと想像してますが、上の私の回答の話はブラウザの話で、一部のブラウザは SameSite=None、Secure=true の対応をしておらず、SameSite=Strict の扱いになるという話です。理解は合ってますか?
退会済みユーザー

退会済みユーザー

2021/08/16 00:35

はい。一部の古いブラウザで対応していないという認識で合っています。 そもそもmonacaアプリ側のWKWebViewが対応していない可能性があり、その場合monacaアプリでcookieは使用できないのではないか、ということですね。
退会済みユーザー

退会済みユーザー

2021/08/16 01:07

> その場合monacaアプリでcookieは使用できないのではないか、ということですね。 そこは自分で調べていただく他なさそうです。 普通に同じドメイン内に限ってのクッキーのやり取りなら問題ないのでは? であれば、質問の、 > monacaアプリでcookieを使用することはできるのでしょうか? という質問に対する答えは Yes です。そこを自分の環境で調べて結果を教えてください。 答えが Yes であれば、上に私が書いた「2016 年の IETF による Cookie の SameSite 属性に関するドラフト標準に則ったブラウザー (iOS12 の Safari 等) では None の値が認識できず、認識できない値は Strict として処理するようになっています」が回答になっていると思います。 「monacaアプリでcookieは使用できない」場合はもちろん「None の値が認識できず、認識できない値は Strict として処理する」場合でも解決策は認証にクッキーではなくベアラトークンを使う他にはなさそうです。
guest

この質問の投稿者はすでに退会しているため、質問者からの返信やベストアンサーの選定がない点にご留意ください。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問