背景:私はAPI 21にアンドロイドWebview
秒と非常に紛らわしい行動を経験していますクッキーは、AndroidのWebView API 21に格納されていないアップ
時に実際のデバイスでテスト。
私は、次の機能
- ログイン(2段階認証)でローカル
HTML5
アプリケーション(内部の資産フォルダ)を持っています。 - 認証に応じて項目のリストを表示します。
問題は:
ログイン要求を行った後、サーバは、セッションとクッキーを返します。このCookieは、API 21以上の実デバイスを使用する場合はWebview
に保存されません。エミュレータ(この場合はGenymotion)を使用すると、クッキーは適切に保存されます。
詳しい情報:
認証を行うための要求は、以下のヘッダがあります。次の応答では
POST http://myServer/j_spring_security_check HTTP/1.1
Proxy-Connection: keep-alive
Content-Length: 101
access-control-allow-origin: *
accept: application/json
access-control-allow-credentials: true
User-Agent: Framework/1.5.0 (Linux; U; Android 6.0.1; Nexus 5X Build/MMB29Q) App/0.1.1
Origin: file://
content-type: application/x-www-form-urlencoded
Accept-Language: en-US
X-Requested-With: app.package
Host: myServer
:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=4D169E8656DBEDFFA4D17FE8D436A5BA; Expires=Fri, 19-Feb-2016 14:27:55 GMT; Path=/; HttpOnly
Content-Type: application/json;charset=UTF-8
Content-Length: 43
Date: Fri, 19 Feb 2016 14:17:55 GMT
クッキーは、デバイスに保存されていませんAPI 21以上
このフラグは、アプリ内で有効になっている:
android.webkit.CookieManager.setAcceptFileSchemeCookies(true);
(以前と同じ要求/応答が明確化デバイス+すべてのエミュレータ
の残りの部分では正常に動作しますdocumentationさんのようにCookieManagerまたはwebviewがインスタンス化されています)
if(VERSION.SDK_INT >= 21) {
CookieManager.getInstance().setAcceptThirdPartyCookies(this.nativeWebView, true);
}
認証を行った後、私はクッキーのデータストアにアクセスする場合と は「hasCookies」方法を確認し、私は
false
を取得します。2ステップ認証サービスは、実際には同じエンドポイントから3つの異なるパスを呼び出します。このサービスを生成する応答が格納されているCookieはありません。これが適切かどうかはわかりません。
単純な認証を(別のサーバーに)行うと、すべてのデバイスエミュレータにCookieが正しく格納されます。
私は角度1を使用しています。5
https
の代わりにhttp
を使用しています。それは将来解決されるでしょう。コンソールにエラーメッセージが表示されません。
質問:
ブロッククッキーの保存webviews内の任意の内部のセキュリティ対策はありますか?実際のデバイスではなくエミュレータ(ルートデバイス)で動作するのはなぜですか?これは本当に私を悩ます。
はい、これは重要なデータです:http要求はwindows.fetchを使用して行われました... – Jbeerdev
"include"はこの場合に動作します。 – Jbeerdev