2014-09-22 57 views
0

我有一個AngularJS應用程序(使用ASP.NET Web API作爲後端),不需要用戶進行身份驗證(應用程序沒有登錄)。我想確保AngularJS應用程序調用的REST API方法只能從應用程序調用。我顯然不能使用基於令牌的認證。如何保護不使用身份驗證的AngularJS應用程序?

如果不採取任何特別措施,可以使用瀏覽器地址欄或通過編寫調用它們的桌面應用程序來自由調用REST API方法。僅當瀏覽器通過來自具有其他來源的站點的HTML頁面調用API方法時,纔會考慮同源策略。 REST API因此向公衆開放並且容易被破解。

我想知道我能做些什麼來安全地限制對REST API的訪問。任何想法或經驗?

編輯1: 我發現我的問題簡單的解決方案:我只是檢查URL引用的主機是一樣的請求的URL的主機。使用的ASP.NET Web API的REST API操作使用的代碼是:

private bool ApiCallIsAllowed() 
{ 
    var request = HttpContext.Current.Request; 
    return (request.UrlReferrer != null && 
     request.UrlReferrer.Host == request.Url.Host); 
}  

我只是不能100%肯定,如果我總是得到URL引用。

編輯2:根據this問題URL引用是不可靠的。遊民。

+0

您是否在IIS上的同一個應用程序上託管API和AngularJS? – 2014-09-23 09:21:32

+0

是的。這是IIS上的相同(SPA)應用程序。 – 2014-09-23 12:51:53

回答

1
  1. 用ssh - 這是顯而易見的:)
  2. 登錄過程應該生成令牌 - 把它寫成一個庫克 - 每個HTTP請求將在頭用它
  3. 準備休息攔截器將讀取你的令牌和授權每要求
  4. 使用一些JavaScript混淆

不要忘了無效會話)。

您可以使用彈簧安全或其他框架來簡化此過程

+0

與令牌的想法似乎是明顯的。我只是在想,代碼會在JavaScript代碼中可見。但混淆器可能會訣竅。 – 2014-09-22 15:44:34

+0

令牌是唯一且僅在每個會話中有效的。如果經過認證的用戶知道令牌,請不要擔心 - 這是他的權利。他只能和休息一起工作。 Angular只是GUI。裏面沒有商業邏輯。他的會話令牌無效後。混淆器不會改變你的數據。 – Atmega 2014-09-25 09:47:59

+0

但正如我在我的問題中所述:我沒有登錄。因此我沒有與用戶相關的令牌。我可以在沒有登錄的情況下使用令牌,但這對於任何請求都是一樣的。這就是爲什麼令牌的可見性很重要。 – 2014-09-25 13:38:28

相關問題