2016-12-11 165 views
1

如果我在我的MVC應用程序的Web API控制器和我打電話通過jQuery $ AJAX GET請求,我怎麼能確認通話,以確保它是從我的應用程序來的?安全MVC的Web API控制器

有什麼事情,我需要檢查它是來自該IP?我可以使用AntiForgeryToken嗎?

我基本上要在API控制器,只允許從我的應用程序的請求,而不是從別人誰只知道終點。我不希望人們能夠複製API調用。

+2

您是否閱讀過「同源政策」? – Shyju

+0

我已經讀了一點。這聽起來像什麼,我想使用的是antiforgerytoken,但我不明白爲什麼別人不能只是複製該 – blubberbo

+0

可能要考慮使用JWT或其他一些基於令牌的認證系統。另見http://stackoverflow.com/q/11476883/215552 –

回答

1

您可以使用CORS來限制從其他來源的呼叫。與CORS一起,您還應該使用身份驗證來保護api(以防止未經身份驗證的訪問)。

要禁用從不同來源請求,則可以在網頁你API(網頁API 2)下面的實施例用[DisableCors]屬性。默認情況下,CORS被禁用。如果在較高的水平(不包括控制器)啓用,您就應該使用這個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的域。反僞造令牌由服務器生成,通過cookie和隱藏字段發送給客戶端,以驗證表單帖子是否來自可信來源。反僞造是否足夠,取決於你的應用程序的架構。如果您使用基於MVC的應用程序,其中響應是帶有表單的html頁面,則防僞是非常有用的。如果您使用網絡API,防僞造不可用。另外,如果您希望api接受來自一組域(或不同域)的請求,那麼請使用CORS來限制域。 – Kaushal