3

API バックエンドを使用して Angular アプリを構築しています。いくつかのアドバイスを組み合わせて、トークン認証のフレーバーを備えた API を作成しました。おおまかな流れは以下の通りです。

  1. 認証情報を使用してログイン エンドポイントに POST
  2. 資格情報と承認を検証してから、新しいトークンを生成します
  3. トークンをクライアントに返す
  4. クライアントは HTTP Basic 経由でトークンを使用して API リソースにアクセスします

これはすべてうまくいっています。このトークンに基づいてセッションを作成する際に問題が発生します。クライアントのトークンを単に Cookie に保持する必要があるとは思いませんが、ページの更新間などに永続化するためにセッションが必要です。私の Angular アプリはステートレスであり、API 呼び出しによって完全に入力されます。

クライアントでこのトークンを保持することに関する推奨事項を探しています。トークンを Cookie に保持することには危険があると感じています。Cookie が盗まれ、単に他人として認証するために使用される可能性があるためですが、おそらくこれは正しくありません。

ご協力いただきありがとうございます。

4

2 に答える 2

1

ユーザーを識別する唯一の既知の方法は、クライアントで何らかのトークンを使用することです。HTTP はステートレスであり、どの要求がどのユーザー (ブラウザー) から来ているかを知ることができません。IP アドレスでユーザーを特定することはできません (多くのユーザーがルーターの背後にいて、接続を共有しています)。ブラウザのフィンガープリントを試すことができます。一部のブラウザでは機能しますが、すべてのブラウザでは機能しません。

このトークンをクライアントに保存するには、Cookie を使用することをお勧めします。それらはすべてのリクエストでサーバーに送信され、盗難を防ぐために何らかの保護を行うことができます.

この Cookie を中間者攻撃から保護するには、サーバーへの HTTPS 経由の暗号化された接続を使用する必要があります。

Cookie に次の属性を設定します。

HTTPOnly: JavaScript で Cookie にアクセスできません (XSS 保護)

安全: Cookie は https 経由でのみ送信されます

パス: Cookie は指定されたパス (例: /login) でのみ送信されます

Cookie の有効期限も定義するので、Cookie は 2 日程度で無効になります。

しかし、あなたは正しいです。このトークンが盗まれると、他の誰かがこのユーザーとしてログインできます。

于 2013-10-24T21:04:28.537 に答える
0

Angular アプリであるため、すべての認証済みメソッドは ajax リクエストに対してのみ提供されると想定します (サーバーに ajax のみに応答するように指示できます)。その場合、CORS が役立ちます。

完全に安全な唯一の方法は HTTPS ですが、この方法はおそらくあなたが思っているよりも安全です。詳細については、CORS を少し読んでください。ただし、基本的には、サーバーは、同じドメインによって提供された html ページからの ajax リクエストにのみ応答するという考えです。

これを確認するために、飛行前の OPTIONS リクエストが送信されることがよくあります。ブラウザーは、実際の要求の前に、Origin ヘッダー (ページのオリジン) を含む OPTIONS 要求を送信します。オリジンがそれを受信するサーバーのドメインと一致する場合、後続のリクエストは許可されます。そうしないと、Same Origin Policy に違反し、拒否されます。

これにより、誰かがトークンを盗み出し、サーバーが提供していないページ (ハッカーのローカル マシンで実行されているものなど) からトークンを含むリクエストを送信するのを防ぎます。

ただし、クレジット カードの取引や非常に安全な取引を行う場合は、HTTPS を使用する必要があります。

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

于 2013-10-24T20:59:35.907 に答える