3

パブリック Web サイト www.Customer1.com および www.Customer2.com からアクセスできる API を www.MyDomain.com に作成したいと考えています。これらの公開 Web サイトには、各顧客の在庫が表示され、ログイン機能はありません。彼らは AJAX 呼び出しを使用して、API からデータを読み取ります。

さまざまなドメインから AJAX を介してアクセスできるように API を保護するにはどうすればよいですか?ただし、誰も API にアクセスして、すべての顧客データとすべての在庫をスクレイピングすることはできません。

私は自分でさまざまな解決策を考えてみましたが、それらはすべて、人々が公開 Web サイトにログインする必要があるか (これはオプションではありません)、何らかの秘密の「キー」をブラウザのソース コードで公開する必要があります。その後、簡単に盗まれる可能性があります。

どんなアイデアでも大歓迎です。

ありがとう!

PS Javascript と CORS を使用して、今調べる必要のある障害はありますか?

4

3 に答える 3

1

ブラウザからの認証なしでアクセスできるものは、定義上安全ではないため、それを止めることはできません。最善の策は、 and の所有者と関係を持つことcustomer1.comですcustomer2.com。これら 2 つの Web サイトのサーバー アプリは、HTTP 呼び出しを行い、サービスで認証します。このようにすることで、あなたが話している CORS の問題も回避できます。

クライアント機能を既に設計している場合でも、おそらく JavaScript をあまり変更せずにそれを行うことができcustomer1.comます。API の代わりに AJAX 呼び出しを指すようにし、customer1.comこの要求を受け入れて、API へのプロキシとして機能するだけです。 . 認証を除いて、残りのリクエストとレスポンスは API へのパススルーにすぎません。

于 2013-09-03T15:51:05.887 に答える
1

Microsoft.AspNet.WebApi.Cors を使用できます。

webapi configASP.NET WEB API で CORS を使用するには、1 行追加するだけです。

config.EnableCors("*","*","*");

詳細はこちらをご覧ください。

于 2013-09-04T01:29:33.910 に答える
0

ここで最小限のセキュリティを提供する最も簡単な方法は、ある種のトークン システムを提供することです。各アプリには独自のトークン、または検証のためにサーバーに渡す必要があるトークンの組み合わせがあります。このトークンをどのように生成するかはあなた次第であり、アプリのアクセスにリンクされていること以外は何も意味する必要はありません。

各 API 実装者がアカウントを開設する方法を提供します。このようにして、誰が何にアクセスしているかを知ることができ、場合によってはサービスをブロック/停止できます。

たとえば、トークンは単に MD5 ハッシュにすることができます。

7f138a09169b250e9dcb378140907378

データベースでは、このハッシュはアカウントにリンクされています。リクエストごとに、必要なものとともにこのトークンを送信します。最初に有効であることが確認され、次にリクエストが満たされます。トークンが無効な場合は、その処理方法を決定できます。何も返さないか、「アクセスが拒否されました」(または必要なもの) を返します。

避けるべきことの 1 つは、すべての人に 1 つのトークンを使用することですが、これは出発点になる可能性があります。これは、許可されていないアプリがこのトークンを取得して悪用した場合、何らかの形でトークンを漏えいしたアプリだけでなく、すべてのユーザーのトークンを変更する必要があるためです。また、誰かが何かにアクセスできるかどうかを制御することもできません。

ASP.NET を挙げたので、WCF を紹介することもできます。WCF はかなり複雑ですが、ユーザーとクライアントの両方にサービスを提供する包括的な Web サービスをセットアップするために必要なすべてのツールを備えています。

これがあなたの出発点になることを願っています!

編集:

誰かが何らかの形でトークン キーを漏えいした場合のセキュリティ上の懸念があります。とにかく、アプリ/サービスがトークンを公開しないように設定してください。また、トークンが悪用された場合に、クライアントの両方がトークンをブロックする柔軟な方法を用意してください。

于 2013-09-03T16:10:29.397 に答える