web-dev-qa-db-ja.com

APIがユーザー名ではなくAPIキーを使用するのはなぜですか?

APIを処理するときに、エージェントを識別するためにAPIキーを使用することが一般的になりました。開発者が指定したユーザー名を使用するよりも、それを行うメリットは何ですか?それは単にAPIキーが推測しにくいということですか、それともより深い理由がありますか?

11
Sinan Taifour

キーを使用する理由はいくつか考えられます。

  • 特にキーが認証の一部として2倍になる場合は、推測を防止します。これがTerryの答えがあなたに伝えようとしていることです-悪意のあるユーザーが大規模なアドレス空間を検索できるようにするときに、悪意のあるユーザーが辞書から複数のユーザー名を単純に試すことを許可するのはなぜですか(128ビットよりかなり大きい必要があります)少なくとも)。レート制限とIPブロッキングを組み合わせると、多数の攻撃を除外できます。
  • ユーザー名が公開されている場合にユーザーのアカウントが侵害されるのを防ぎます。ユーザー名がantonyで、APIキーがantonyの場合は、侵入の途中です。ただし、APIキーがランダムであると、はるかに難しくなります(ポイント1)。
  • 複数のデバイスにシステムへのアクセスを許可し、ひいてはデバイスの一種のアクセス制御を有効にします。 APIキーとして覚えやすいユーザー名が1つある場合、対応するAPIシークレットがない限り、これを取り消すのは難しくなります。 APIシークレットを使用している場合、デバイスごとのシークレットを使用すると、同様のことが実現されます。
  • 漏洩したキーが何らかの方法でユーザーを識別しないようにします。もちろん、アプリケーションまたはデバイスのコンテンツがユーザーを識別する場合、これはまったく役に立ちません。

このリストはおそらく完全ではありません。

8
user2213

他のユーザーが述べたように、各ユーザーに一意のIDを作成します。

ただし、 具体的にはAWS の場合、「リクエスト認証、AWSAccessKeyId要素は、署名の計算に使用された秘密鍵、および(間接的に)リクエストを行った開発者を識別します。」

3
tnicholson

私が見たほとんどのシステムでは、APIキーは単に識別手段として機能するだけではありません。通常、認証の手段としても使用されます。

開発者は、作成するすべてのリクエストに対してAPIキーを入力することはありません。キーはおそらくコードまたは構成ファイルのどこかに保存されます。開発者がランダムなAPIキーよりも記憶に残るユーザー名とパスワードの組み合わせを選択できるようにしても意味がありません。

1
user10211

APIキーは、要求を行っているサービスを識別するためのものです。ユーザー名ではなくランダムなキーを渡す方がすべてコンピューターで処理され、同じものを必要とする人々の問題を回避できるので、それらが他の方法である理由は特にありません。ユーザー名。

おそらく、ユーザー名を偽装するように選択できる場合もあります。これは、平均的なユーザーが目にするものではないので、どれほど効果的であるかはわかりませんが、より経験豊富なユーザーがそれに陥らないことを願っていますが、Facebook APIのユーザー名を「FacebookAdmin」にできれば、特に良くない。

1
AJ Henderson