web-dev-qa-db-ja.com

REST apiのセキュリティ(user / pass auth vs hmac vs oauth)

私は2つのサーバーを持っています(1つはHetznerにあり(私はHと呼びます)、もう1つはオフィスにあります(Oと呼びます))。 Oで基本的なCRUD Webサービスを実行する必要があり、サービスの唯一のコンシューマーはHです。Oのデータは機密性の高いユーザーデータです。これは一時的なダクトテープサービスであり、サーバーOの必要性とともに将来は廃止されます。

ここに私が心に留めているものがあります:

  1. サービスはhttpsで実行されます
  2. リクエスト認証のための基本的なHTTP認証
  3. Iptablesを介してHのIPに対してのみOのポートを開く。

十分に安全に聞こえるか、見落としている可能性があるかどうか知りたいのですが。 HMACまたはOAuthがこのアプローチよりも優れている点はありますか?

15
Abhinav Kaushik

[〜#〜] hmac [〜#〜] は、より大きなプロトコルの一部として意味のある暗号化アルゴリズムです。直接いじってはいけません。 HTTPSを使用する場合、SSL層には実際には(他のアルゴリズムの中でも)HMACが含まれています。

OAuth は認証の標準であり、その主な使用例は資格情報を共有せずにユーザーの認証を管理することです-1人のユーザーが持つことができるという考え資格情報( ")単一のサーバーに知られています。実際のパスワードを表示するのに十分なほど信頼せずにseveral他のサーバーによってアクセスを許可するために使用できます。たとえば、サーバー[〜#〜] s [〜#〜]および[〜#〜] t [〜#〜]信頼認証サーバー[〜# 〜] a [〜#〜]、ユーザー[〜#〜] u [〜#〜]も信頼する[〜#〜] a [〜#〜] =(いくつかのHTTPS接続内で)パスワードを表示するのに十分であり、-[〜#〜] s [〜#〜]および[〜#〜] t [〜#〜][〜#〜] a [〜#〜]に話しかけ、ユーザー[〜#〜] u [〜#〜]が確かに誰であるかを確認しますすることが;いい部分は[〜#〜] s [〜#〜][〜#〜] t [〜#〜]パスワードが表示されないこと[〜#〜] u [〜#〜]信頼する必要はありませんthem

あなたの場合、あなたは単一の「ユーザー」(あなたのサーバー[〜#〜] h [〜#〜])を持っています、そしてそれはマシンなので、それは彼のパスワードを気にする必要はありません。 [〜#〜] h [〜#〜]「パスワード」(ランダムな文字の長いシーケンス)を持つことができます[〜#〜] h [〜#〜] =は[〜#〜] o [〜#〜]での認証にのみ使用するため、OAuthの余分な複雑さは必要ありません。

ここに固有の脆弱性は、そのサーバー[〜#〜] h [〜#〜]が機密データにアクセスできることです。これは設計によるものですが、これは、データがホストサーバーに到達することを意味します。つまり、ホスティングサービスを信頼して、データを覗いたり、不注意で漏らしたりしないことを意味します。問題の定義に従って、それを回避することはできません。あなたは基本的にサーバー[〜#〜] h [〜#〜]自体を盗聴や敵対的な変更から安全であると考えています。これらの条件下では、HTTPの「基本」認証はHTTPS内で実行されます問題ありません

ビットサーバー認証を強化したい場合があります。マシン[〜#〜] h [〜#〜]は、本物と通信することを確認する必要があります[〜#〜] o [〜#〜]サーバー、通常は証明書の検証が必要です。 [〜#〜] h [〜#〜]を構成して「直接信頼」を作成できます。つまり、インポートは[〜#〜] h [〜#〜] a [〜#〜] o [〜#〜]の証明書(秘密鍵ではなく公開証明書のみ)のコピーと[〜#〜] h [〜# 〜]その特定の証明書のみを信頼します。これにより、証明機関の問題を回避でき、特に、安価な自己署名証明書を安全に使用できるようになります(そのような証明書に対してCAに支払う必要がないため)。

15
Tom Leek