web-dev-qa-db-ja.com

繰り返されるユーザー名/パスワード要求に対するトークンベースのAPIセキュリティ

毎回ユーザー名とパスワードを送信するのではなく、トークンベースのAPIセキュリティモデルよりもセキュリティ上のメリットは何ですか?

トークンベースのアプローチのプロセスは次のとおりです。

  1. ユーザー名とパスワードを使用して「ログイン」リクエストを送信します
  2. トークンを受け取る
  3. 後続のすべてのリクエストで、ユーザー名/パスワードの代わりにトークンを使用します

トークンベースのシステムの利点(これによると http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net -identity / )は次のとおりです。

  • スケーラビリティ
  • 疎結合テクノロジー
  • モバイルフレンドリー

ただし、これらの利点が毎回ユーザー名/パスワードを送信するのではなく、トークンベースのアプローチに固有である理由がわかりません。どちらの方法でも、後続のWebサーバーをクラスターに追加するのは簡単ではありませんか?パスワード検証はどちらの場合でも実行されるため、クライアント側も同様に疎結合されていますか?

利点?ユーザー名/パスワードを毎回「チェック」する必要がなく、リストに基づいてより簡単な検索を実行できるというだけのことですか?セッションキーの?これはパフォーマンスの改善ですが、クライアントアプリケーションの複雑さが増し、トークンがまだ有効かどうかをクライアントが確認する必要があるトークンにタイムアウトがある場合はさらに複雑になりますか?

欠点?すべてのリクエストでユーザー名/パスワードが送信されることの欠点は、このデータの送信が増えるにつれて、発見される可能性が高くなることですか? ?もしそうなら、HTTPSはこの脅威に対抗するのに十分堅牢ではありませんか?

編集:私はこの潜在的な重複を読みました: なぜリクエストごとにユーザー名/パスワードの代わりに認証トークンを使用するのですか? しかし、ユーザー名/パスワードが次のように保存されるとポイント2が述べている理由が少しわかりませんクッキー。クライアントマシンがユーザー名/パスワードをcookieとして保持し、それを投稿コンテンツ自体に含めないのはなぜですか?

3
JLo

クライアントマシンがユーザー名/パスワードをCookieとして保持し、投稿コンテンツ自体に含まないのはなぜですか?

ユーザー名/パスワード(またはそのことについてはトークン)を投稿コンテンツ、localStorageまたはsessionStorageに保持すると、このコンテンツがXSS攻撃にさらされます。 this の記事をご覧ください。この記事はトークンに関するものですが、同じ原則が資格情報(ユーザー名/パスワードを含む)にも適用されます。これに関するいくつかの参照 here 。このような情報をhttpOnly Cookieに保存すると、コンテンツはJavaScriptで利用できなくなり、理論的にはXSS攻撃の影響を受けなくなります。資格情報をCookieに入れたら、CSRF攻撃にさらされ、それを処理する必要があります。

リンクされた質問の答えは正しいです。

トークンのもう1つの利点は、有効期限です。ユーザー名/パスワードの資格情報が盗まれた場合、それを検出することは困難です。トークンはある時点で期限切れとなり、ユーザーは新しいトークンを許可されるように再ログインする必要があります。これにより、盗まれたトークンをサーバーでの認証に使用できる期間が制限されます。ユーザー名/パスワードの資格情報の場合、そのような制限はないか、それよりも大きい(パスワードの有効期限ポリシーは通常、トークンが分または日で期限切れになるように設定できる1か月以上です)

1
Marko Vodopija

ユーザー名/パスワード

  • APIリクエストごとに認証情報を送信することはお勧めできません。 ssl/tls経由で資格情報を送信している場合でも(エンドエンドの安全なトンネルを提供しない、既知の脆弱性!!)、クライアントがMITM(Lan/Wifiレベル、ISPレベル、国レベル)攻撃の犠牲になる可能性が高い。

  • ユーザー名(名前、メール)/パスワード(複雑すぎない)は簡単に推測できます。間違いなく、ユーザーに21文字以上のパスワードを正しく入力させたくないですか?より良いユーザーエクスペリエンスのために!

トークンベース

  • 1つのトークン(ユーザーがログアウトするまでの有効期限付き)は、ユーザー名/パスワードと同じです

  • Oauth、JWT、またはカスタムアクセス/更新トークンスキームを実装してみてください。誤って実装した場合、このアプローチ自体ではセキュリティは向上しません。

トークンを使用すると、より柔軟なセッション管理の透過性をユーザーに提供できます。

例:-

  • リモートセッションを終了する(トークンを期限切れにする!)
  • 現在のセッションを更新(更新トークンを介してアクセストークンを更新!)
  • すべてのアクティブなセッションを追跡する
  • トークン(ランダム+長さ)はブルートフォースするのは簡単ではありません。

ここでは、スケーラビリティやその他の利点については触れません。しかし、はい、トークンベースのアプローチでサービスを拡張できます。

0
Priyal