APIキーまたはトークンは、REST APIの公開されたリソースへのアクセスを許可するため、直接認証および承認メカニズムのカテゴリに分類されます。このような直接的なメカニズムは、委任ユースケースで使用できます。
RESTエンドポイントによって公開されているリソースまたはリソースのセットにアクセスするには、そのIDに従ってリクエスターの権限を確認する必要があります。ワークフローの最初のステップは、要求を認証することによってIDを検証することです。後続のステップは、アクセスのレベル(つまり、読み取り、書き込み、または読み取り/書き込み)を許可するために、定義された一連のルールに対してIDをチェックすることです。上記の手順が完了すると、一般的な追加の懸念事項は、許可された要求のレート、つまり、リクエスタが特定のリソースに対して実行できる1秒あたりの要求数です。
OAuth(Open Authorization)は、委任アクセスの標準プロトコルであり、多くの場合、主要なインターネット企業がパスワードを提供せずにアクセスを許可するために使用します。明らかなように、OAuthは、リソース所有者に代わってサーバーリソースへの安全な委任アクセスを提供することにより、認証と承認の上記の懸念を満たすプロトコルです。これは、サードパーティがリソース所有者に代わってサーバーが管理するリソースにアクセスできるようにするアクセストークンメカニズムに基づいています。たとえば、Johnが委任を承認すると、ServiceXはJohnに代わってJohn SmithのGoogleアカウントにアクセスしようとします。次に、ServiceXには、Googleアカウントの詳細にアクセスするための時間ベースのトークンが発行されます。
APIキーの概念は、上記のOAuthトークンとよく似ています。主な違いは、委任がないことです。ユーザーは、連続するプログラムによる対話のために、サービスプロバイダーにキーを直接要求します。APIキーのケースも時間ベースです。OAuthトークンとしてのキーは、タイムリースまたは有効期限の対象となります。追加の側面として、キーとトークンは、サービス契約によるレート制限の対象となる可能性があります。つまり、1秒あたりのリクエスト数は一定数にしか対応できません。
要約すると、実際には、従来の認証と承認のメカニズムとキー/トークンベースのバージョンの間に実際の違いはありません。ただし、パラダイムは少し異なります。クライアントとサーバー間のすべてのやり取りで資格情報を再利用し続ける代わりに、サポートキー/トークンが使用されます。これにより、やり取り全体がスムーズになり、安全性が高まります(多くの場合、JWT標準、キー、およびトークンは、作成を回避するためにサーバーによってデジタル署名されます。
- 直接認証および承認:従来の資格情報ベースのバージョンの変形としてのキーベースのプロトコル。
- Delegated Authentication and Authorization:OAuthベースのプロトコルのように、今度は認証情報ベースのバージョンのバリエーションとしてトークンを使用します(全体的な目標は、第三者にパスワードを開示することではありません)。
どちらのカテゴリも、関心のあるリソースを所有するサーバーとの最初のやり取りに、従来のID検証ワークフローを使用します。