web-dev-qa-db-ja.com

Angular 2/4トークンを保存する場所

angular 4クライアント側で使用しているトークンを生成するためのREST APIがありますが、問題はこのトークンをどこに保存するかです。

インターネットでは、ローカルストレージまたはCookieに保存できることがわかりました。

だから私の質問は、たとえばストアトークンがローカルストレージであり、別のブラウザから有効なトークンをコピーしたばかりの場合、有効なトークンがあるため、そのようなトークンを保存するセキュリティがあり、基本的には同じですCookieを使用するか、重要な情報を見逃した可能性がありますか?

17
user2870934

これは、このテーマに関する多くの知識を提供できるトークン/クッキーに関する完全な記事です: auth0:Cookies VS Tokens

次に来るものを理解するために最も重要な部分を引用します。

Webサイトが直面する最も一般的な攻撃ベクトルの2つは、クロスサイトスクリプティング(XSS)とクロスサイトリクエストフォージェリ(XSRFまたはCSRF)です。

クロスサイトスクリプティング)攻撃は、外部エンティティがWebサイトまたはアプリ内でコードを実行できる場合に発生します。

ローカルストレージでJWTを使用している場合、クロスサイトリクエストフォージェリ攻撃は問題になりません。一方、ユースケースでJWTをCookieに保存する必要がある場合は、XSRFから保護する必要があります。

私たちのCTOは過去に、XSS攻撃は一般によく理解されているため、XSRF攻撃に比べて対処がはるかに簡単であると主張しました。

だから基本的にまとめると:

  • [〜#〜] xss [〜#〜]攻撃はTokensおよびLocalStorageの問題です。しかし、それはAngular=がすべてをサニタイズし、効率的に[〜#〜] xss [〜#〜]攻撃を防ぐためではありません。( https ://angular.io/guide/security#angulars-cross-site-scripting-security-model
  • [〜#〜] xsrf [〜#〜]攻撃はCookiesの問題であり、設定する必要がありますそれらに対処する独自のセキュリティフレームワーク。

したがって、トークンを管理するには、標準のJWTトークンアプローチをお勧めします。トークンは[〜#〜] jwt [〜#〜]形式で署名されているため、これは私の意見では最も安全なソリューションです。もちろん、標準トークンは、encryptedまたはsigned(同じではない)のいずれかである必要があります。

適切なライブラリ( https://github.com/auth0/angular2-jwt など)を使用すると、セットアップと管理が非常に簡単です


さらに進むには:トークンが認証に使用されることを想像します。そして、人々はすでにそれを使用しており、それらを使用する良い/悪い習慣を知っています。

トークンを更新するRefresh Tokensを使用する動作中のWebサイト(Twitter/Facebookなど)から認証がどのように管理されるかを確認する必要があります。興味を引く可能性のある追加リンクを次に示します。


EDIT:JWTのベストプラクティスに関する追加リンク:

12
Alex Beugnet

トークンを保存する方法、サーバー側で同じを検証するために取ったセキュリティ専攻よりも、それをどのように検証するかについての詳細です。

CORS対応APIを使用している場合は、悪意のあるソースからではなく、有効なクライアントからリクエストが送信されていることを確認する必要があります。

トークンを使用して機密情報を保存している場合、保存する前に暗号化する必要があります。

お役に立てれば!!

0
Madhu Ranjan