2017-10-27 11 views
0

私はログイン時にユーザーのログイン情報をアプリケーションに渡すログインサービスを持っています。これにより、ログインに成功したときにアプリケーションの最初のページが呼び出されます。このリクエストでは、ユーザー情報がCookieの一部として渡されます。CookieはHttpResponseMessageから表示されますが、JavaScriptには表示されません。

以下のコードを使用して、私のWeb APIリクエストのリクエストからこれらのCookieを読み取ろうとしています。

CookieHeaderValue getAccessUserInfo = request.Headers.GetCookies("GAUSERINFO").FirstOrDefault(); 

       if (getAccessUserInfo != null) 
       { 
        userInfo = getAccessUserInfo["GAUSERINFO"].Values.Get("corporate_id"); 
        Logger.Info(string.Format("User Cookie {0}", userInfo)); 
        return userInfo; 
       } 

しかし、javascriptまたは角度jから同じCookieを読み取ろうとしている場合、そのCookieがコレクションに表示されません。 以下は、角度jのクッキーを読み取るために使用しているコードです。

console.log($document[0].cookie); 

これは結果からわかるcookieです。私が期待しているクッキーは、GAUSERINFOと以下のクッキーです。

enter image description here

私はC#のコードを使用して、私のAPIでクッキーを読むことができるようにAPIに体を要求し、角度のjsまたは少なくともパスからこれらのCookieを読み取るする方法はあります。

答えて

6

セキュリティ上の理由から、JavaScriptはHTTPのみのCookieにアクセスできません。 XSS attacksを防ぐためには、一般にユーザーセッション/ログイン情報はHTTPのみでなければなりません。攻撃者がユーザーのセッション情報を取得すると、ユーザーを偽装する可能性があります。 corporate_idのようなユーザー情報をクライアント側に公開したい場合は、HttpOnlyとしてマークされていない別のCookieに入れることができます。

MSDN for HttpCookie.HttpOnlyから:

盗まれたクッキーは、ASP.NETのセッションIDまたはフォーム認証 チケットとして、サイトにユーザー を特定の機密情報を含むことができ、かつ順番に攻撃者によって再生することができますユーザーに のように偽装するか、機密情報を入手してください。 HttpOnly Cookieが準拠ブラウザによって受信された である場合、クライアント側の スクリプトにはアクセスできません。

を使用すると、クライアント側を必要とし、あなたのC#コードでそれを作成するときにfalseに HttpOnlyを設定してください情報のみで別々のクッキーを作成し、 corporate_idクライアント側を使用します。

編集:それの要約があることhttps://stackoverflow.com/a/17065576/6950124

:あなたのユースケースは、角の$ HTTPサービスを使用してAPIに沿ってクッキーを転送する場合は、あなたがそれを行うことができ、追加の構成は、この答えに詳述されているがあります$httpProvider.defaults.withCredentials = true;を設定し、ブラウザが最初にページを要求したときに、Access-Control-Allow-Credentials: trueというヘッダーを返すようにWebサーバーを設定する必要があることもあります。これにより、ブラウザは、JavaScriptコードがHttpOnly Cookieに部分的にアクセスできることを知ることができます。

すべてが正しく設定されている場合は、AJAX呼び出しを行うブラウザコードがHttpOnly Cookieを転送する必要があります。

+0

私はクッキーを送ってきたサービスを一切支配していません。可能であれば、私のブラウザを通して少なくとも私のapiにコンテンツを転送する方法を見つけることを試みています。 –

+1

HttpOnlyが問題です。あなたが何をしようとしているのかを正確に防止するのはHttpOnlyです。 – Axr

+0

@AshwiniMaddala私の答えを編集してください。あなたはJavaScriptコード内のクッキーに直接アクセスすることなく、これを動作させるために角度とWebサーバーを設定することができます。 –

関連する問題