2016-02-19 9 views
5

背景:私は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内の任意の内部のセキュリティ対策はありますか?実際のデバイスではなくエミュレータ(ルートデバイス)で動作するのはなぜですか?これは本当に私を悩ます。

答えて

1

ネットワーク要求が追加する必要があるかもしれませんwindow.fetch使用して行われた場合://または 'を含む'

は( '/何か'、{ '同一生成元の資格情報を})フェッチ

クロムでは、window.fetchには、デフォルトで 'omit'に設定されたクレデンシャルフラグが設定されており、Cookieストレージにはクッキーは保存されません。このバグの詳細はこちらhttps://bugs.chromium.org/p/chromium/issues/detail?id=477523

+0

はい、これは重要なデータです:http要求はwindows.fetchを使用して行われました... – Jbeerdev

+0

"include"はこの場合に動作します。 – Jbeerdev

関連する問題