2015-07-10 191 views
0

我是新開發API的,並已將ASP.NET web api功能構建到我現有的MVC項目中。我希望客戶能夠發送多個對象實例的JSON,這些對象實例可以保存到我的數據庫中,但是目前該API僅包含框架提供的值模板,我想先解決它現在的安全問題前進充分開發API:授權和驗證ASP.Net web api

[Authorize] 
public class ValuesController : ApiController 
{ 
    // GET api/<controller> 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/<controller>/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    // POST api/<controller> 
    public void Post([FromBody]string value) 
    { 
    } 

    // PUT api/<controller>/5 
    public void Put(int id, [FromBody]string value) 
    { 
    } 

    // DELETE api/<controller>/5 
    public void Delete(int id) 
    { 
    } 
} 

的授權標籤要求用戶在瞬間登錄我的網站上,我很困惑,我怎麼可能API編程在這種情況下被調用。

我想保護api,客戶端要使用它,必須提供其唯一的API密鑰才能訪問功能。此外,我想使用此API密鑰來確定哪個用戶調用了API,以便我可以僅使用他們的數據對其進行響應。

從早期的起點(僅集成了Web Api功能)中實施這些步驟所涉及的步驟是什麼?

我一直在看,並越來越困惑的HMAC認證,雖然這似乎與我後似乎相當複雜的實現(也許只是因爲我在一個新的領域),我想必須有一種更簡單的方法來實現我想要的?

+0

除了對用戶進行身份驗證之外,還想使用HMAC來驗證數據的完整性嗎?或者你只是想驗證用戶? –

+0

我不確定是否需要我的場景。我有一個用戶可以創建聯繫人和消息的門戶,而API主要是允許其他系統在他們自己創建時在我的系統中創建聯繫人。使用我提供給第三方開發人員的一些密鑰,我覺得驗證足夠了。你會建議什麼? – JonnyKnottsvill

+0

我覺得像這樣可能是足夠的http://stackoverflow.com/questions/11014953/asp-net-web-api-authentication?rq=1 – JonnyKnottsvill

回答

2

快速解決方案是擴展AuthorizeAttribute並在那裏定義您的驗證邏輯。示例見this SO question

稍微模塊化的方法是創建一個認證過濾器。見ASP.NET docs here。這樣你可以分開認證和授權。

至於HMAC與基本身份驗證,我會更簡單基本身份驗證是安全性不是您的系統的關鍵組件。這樣你可以更快地發佈v1.0。