私は、セキュリティ意識の高い大企業向けの REST API フレームワークを設計しています。
私たちのサービスへのすべての呼び出し元は、システムにアクセスするためのクライアント キーを提供する必要があります。これを使用して、その特定のクライアントのアクセスを承認し、レート制限と監視を行います。また、一部の API 呼び出しは顧客データにアクセスし、OAuth 2 トークンを使用してそのデータへのアクセスを制御します。
私の質問は、クライアントキーを渡す方法です。URI で渡すことができないため (URI がログに記録されることがあります)、HTTP 基本認証またはクエリ パラメーターを使用できません。代わりに、HTTP ヘッダーにある必要があります。だから私は2つのアプローチを考えましたが、どちらも欠陥があります:
(1) 独自のヘッダーを発明する: MyCompanyAPIKey: api-key-goes-here
. これには欠陥があります。独自のヘッダーを発明する予定であり、それは設計上の選択として適切ではありません。他の人や標準ツールでは機能しません (独自に発明したため)。
(2) Authorization ヘッダーを使用しますAuthorization: Bearer api-key-goes-here
。これは、OAuth (ヘッダーを必要とする) を使用する場合に競合するため、欠陥があります。技術的には、OAuth トークンがある場合はクライアント キーは必要ないと思いますが (OAuth トークンは単一のクライアントに固有のものであるため)、通常のツールでそれを処理できるかどうかはわかりません。
私たちはどのように進めるべきだと思いますか。