0

現在、mvc4アプリケーションにWeb APIを実装していますが、WebAPIサービスの呼び出し元の認証について質問があります。

私のWebアプリケーションでは、2つの異なる理由でWebAPIが使用されます。まず、JavaScriptがサーバーと通信し、次にサードパーティコンポーネントがアプリケーションと通信します。

このため、サービスの発信者を認証したいと思います。どちらかの発信者のヘッダーにユーザー名とパスワードを渡すのは簡単ですが、ヘッダーは不正に盗聴される可能性があります。サービスをhttpsにすると、これを防ぐことができますが、リッチアプリケーションでjsが呼び出すとパフォーマンスの問題が発生します。

私はこれについてウェブ上の例を見てきましたが、mtシナリオの両方をカバーし、私のサービスを保護する解決策を今のところ見つけることができません。この問題を解決する方法として提案を聞くことに興味がありますか?たとえば、既存の企業はどのようにしてサービス、つまりTwitterを保護していますか。許可されているサードパーティとJavaScriptに対して、サービスを保護したいと考えています。私を教育してください!

4

1 に答える 1

0

これを行う 1 つの方法は、デジタル署名を使用することです。クライアントは要求データ (POST または GET パラメーター) のハッシュを計算し、そのハッシュにキーで署名して、署名を要求ヘッダーに入れます。次に、サーバーは署名付きハッシュを検証します。

リプレイ攻撃から保護するには、各リクエストに再利用できない nonce 値を含める必要があります。これは通常、増加し続ける整数値 (タイムスタンプなど) として実装されます。サーバーは、指定されたキーに対して最後に使用された値を格納し、最後に使用された値よりも小さい数値のリクエストを許可することを拒否します。

これを実装するには 2 つの一般的な方法があります。1 つは、クライアントとサーバーがリクエストの署名に使用される共通の「シークレット」(キー) を共有する HMAC 署名を使用する方法です。これは簡単ですが、シークレットをサーバーに保存する (そしてそれらを適切に保護する) 必要があります。

2 番目の方法は、クライアントが秘密鍵でリクエストに署名し、公開鍵で署名を検証する非対称鍵 (RSA など) を使用することです。これは少し複雑ですが、秘密鍵をサーバーに保存して保護する必要はありません。クライアントだけがそれを持っている必要があります。

于 2012-10-18T13:34:43.440 に答える