2016-12-11 4 views
1

MVCアプリケーションでWeb APIコントローラを使用していて、jQuery $ ajax経由でGETリクエストを呼び出している場合、アプリケーションからの呼び出しを確認するにはどうすればよいですか?安全なMVC Web APIコントローラ

私はそれが来ているIPをチェックする必要がありますか? AntiForgeryTokenを使用することはできますか?

私は基本的に、APIコントローラが自分のアプリケーションからのリクエストのみを許可し、エンドポイントを知っている誰かからのリクエストは許可しないようにします。人々がAPIコールを複製できるようにしたくありません。

+2

「同一起点ポリシー」についてお読みになりましたか? – Shyju

+0

少し読んだことがあります。私が使用したいと思うものは偽造防止院ですが、他の誰かがそれを複製できない理由はわかりません。 – blubberbo

+0

JWTまたはその他のトークンベースの検証システムを使用して調べることができます。 http://stackoverflow.com/q/11476883/215552 –

答えて

1

CORSを使用して、他の発信元からのコールを制限できます。 CORSに加えて、(認証されていないアクセスを防ぐために)認証を使用してapiを保護する必要があります。

異なるオリジンからのリクエストを無効にするには、Web API(Web API 2)の[DisableCors]属性を使用することができます。デフォルトでは、CORSは無効になっています。それは、より高いレベル(EX-コントローラ)で有効になっている場合は、このattibuteを使用する必要がありますし、低いレベル(EX-アクション)

[DisableCors] 
public class UsersController : ApiController 
{ 
    public HttpResponseMessage GetUser(int id) { ... } 
} 

するhttp://contoso.com

[EnableCors(origins: "http://www.contoso.com", headers: "*", methods: "*")]  
public class UsersController : ApiController 
{ 
    public HttpResponseMessage GetUser(int id) { ... } 
} 
からこのコントローラへのアクセスを可能にするために制限したいです
+0

[DisableCors]と反偽造トークンの使用の違いは何ですか? – blubberbo

+0

CORSと反偽造は異なる概念です。 CORSはあなたのAPIにアクセスできるドメインを制限します。反偽造トークンは、サーバーによって生成され、クッキーと隠しフィールドを介してクライアントに送信され、フォームの投稿を信頼できるソースから検証します。反偽造は十分で、アプリケーションのアーキテクチャに依存します。 MVCベースのアプリケーションを使用していて、レスポンスがフォームのHTMLページであれば、反偽造は非常に便利です。 Web APIを使用している場合、反偽造は利用できません。また、apiが一連のドメイン(または別のドメイン)からの要求を受け入れることを期待する場合は、CORSを使用してドメインを制限します。 – Kaushal

関連する問題