そのため、ここ数日、私は API セキュリティの「ベスト プラクティス」またはテクニック、特にサーバーからサーバーへ (サーバーからサーバーへ) 直接アクセスされる API について、インターネットを探し回っています。さまざまな意見があるようで、それらを実行可能なアイデアにまとめるのは難しい.
多くの人によると、OAuth が進むべき道です。セキュア ソケット プロトコルを使用したくないかどうかに応じて、それぞれ OAuth 1.0A または OAuth 2.0 を選択できます。
OAuth に関して、私の理解では、OAuth 1.0A の主な関心事は要求のデジタル サイネージですが、OAuth 2.0 は基盤となる HTTPS に依存して整合性を保証しています。では、次の仮定を立てても安全でしょうか?
前提: HTTPS を使用する場合、リプレイ攻撃、中間者攻撃を防ぎ、整合性を維持するために、HMAC または任意の形式のデジタル署名を使用する必要はありません。
これにより、交換されたトークンを介して OAuth が管理する承認が残ります。しかし、なぜそれほど複雑なのですか?たとえば、すべてのサーバー (プライベート コンシューマー) にグローバルに一意のユーザー名とシークレットを与えて、各「リクエスト」がシークレット、ユーザー名、およびリクエスト パラメーターのハッシュで「署名」されるようにすることはできますか?
私が知る限り、これは承認と認証を意味します。認証はハッシュの確認によって管理され、承認は禁止されます。これは、重要なことに、すべてのサーバーがそれぞれのリソースに対して同じ特権を持っているためです。
そのため、厳密にサーバー間 (または "2-legged") 通信用の API を設計する場合の最善のアプローチは何ですか? 単純に HTTPS を使用し、各リクエストにパーソナライズされたハッシュで署名することは安全ですか。これは、認証、承認を意味し、状態/セッションを維持する必要もありません。
標準への準拠は、サービスを利用するためのコードを作成する開発者、および一般的な Web 文化にとって有益であることは理解できます。そのため、OAuth の「サブセット」への準拠は魅力的に聞こえます。ここで必要かどうかはわかりません。