我已經在過去實現了ASP.NET WebSecurity成員和WebAPI,但我從來沒有同時使用它們(從不需要)。Web API授權方案
現在,我正在建立一個新的網站,並且客戶端不需要訪問者來註冊或登錄。所以不會有會員資格。
客戶端確實希望能夠通過WebAPI檢索數據。然而,這些數據可能很敏感,並不是我們希望用戶或黑客看到的東西,那麼我將如何'授權'我的客戶 - 並且只能是我的客戶 - 以便她可以從客戶端發出API請求(無論是WinForms桌面應用程序,移動應用程序等)?
我已經在過去實現了ASP.NET WebSecurity成員和WebAPI,但我從來沒有同時使用它們(從不需要)。Web API授權方案
現在,我正在建立一個新的網站,並且客戶端不需要訪問者來註冊或登錄。所以不會有會員資格。
客戶端確實希望能夠通過WebAPI檢索數據。然而,這些數據可能很敏感,並不是我們希望用戶或黑客看到的東西,那麼我將如何'授權'我的客戶 - 並且只能是我的客戶 - 以便她可以從客戶端發出API請求(無論是WinForms桌面應用程序,移動應用程序等)?
我在我的面向公衆的API中實現了類似的東西,其中一些方法只允許被管理員調用。
管理方法簽名包括接受我以前分配給管理員用戶的唯一標識符字符串的字符串參數。
然後在每一個方法調用中,我會檢查API Key是否屬於管理員,如果沒有,則拋出未經授權的異常,或者在數據調用時響應該調用。
實例方法:
public decimal GetCompanyBalance(string APIKey, int CompanyId)
{
if(!UserManager.GetByAPIKey(APIKey).IsAdmin){
throw new UnauthorizedException();
}
return Company.GetBalance(CompanyId);
}
謝謝@Dimitri,這是一個很好的幫助。 – uSeRnAmEhAhAhAhAhA
我做每個請求的,由一個GUID傳遞作爲APIKey – Dimitri
感謝@Dimitri,你能詳細一點點的更多信息,請? – uSeRnAmEhAhAhAhAhA
有很多方法可以做到這一點;你有什麼樣的限制?爲了避免人員出現,即使是按設備或按應用程序安裝,您也需要進行某種身份驗證;從現在開始,你的'客戶'是不是有一些認證?您可以設想使用API密鑰來訪問API,但這並不安全;有人可以輕鬆地嗅出鑰匙。你也可以使用公鑰/私鑰組合,但是設置起來有點困難。這完全取決於你需要的安全級別以及你願意做什麼來獲得它。 –