2013-04-12 57 views
3

我已經花了過去一週內就SO和書籍閱讀有關身份驗證和開始推出基本驗證了我的WebAPI讓HTML 客戶可以讓用戶登錄/註冊/註銷,但基本身份驗證不方便登出,所以我回到原點。如何保護WebAPI應用程序/ HTML + JS客戶端?

詳情:

  1. 我不需要讓用戶與其他服務進行登錄。我不需要臉書或谷歌登錄。只是一個用戶名/密碼。

  2. 我需要用戶能夠從客戶端應用程序(而不是瀏覽器)登錄/註銷/註冊。

  3. 我不介意通過電話發送憑證,因爲我將使用SSL。

  4. 目前只有一個客戶端,但會有其他人訪問API,所以我將需要在將來實現類似於api鍵的功能。也許這是一個單獨的問題。

  5. 我有一個RESTish WebAPI接受/返回JSON到其他域中的HTML/JS客戶端。

  6. 這是用於原型製作的,所以我不需要最好的解決方案,只需足夠用於預發佈並且實現時間短。

我該從哪裏開始?你會怎麼做,爲什麼? Forms Auth是一個選項嗎?

+0

你的攻擊場景是什麼?您是否只保護您的服務器免受惡意客戶的攻擊,或者您是否需要保護用戶的密碼免受其計算機上的惡意軟件的侵害?註冊時,您是否需要爲非人類註冊大量賬戶而付出代價? –

+0

我沒有考慮到攻擊情況。只是客戶。 No. – RobVious

+0

很難回答「我如何{保護,加固} X」的問題?而不知道你正在保護什麼,這是攻擊場景所闡明的。 –

回答

2

在這個問題你有

我不介意通過線路發送憑據,因爲我將使用SSL。

在你有答案的評論稱

我只是不希望用戶發送過線明文密碼。

不知道你到底在找什麼,但Forms Authentication絕對是一種選擇。您也可以使用基本身份驗證,但它有一些缺陷,如您提到的:無註銷等。您必須使用基本身份驗證的HTTPS。

如果瀏覽器彈出窗口是主要關心的問題,您可以通過在第一個請求中搶先發送憑據來解決這個問題。通常情況下,第一個請求沒有授權請求頭。服務以401響應,併發回指示基本方案的WWW-Authenticate響應標頭。這是當瀏覽器彈出對話框並詢問用戶標識和密碼時,將其打包在基本方案中併發送授權標頭。

0

首先更重要的是; SSL,SSL SSL 這是一個非常簡單的步驟,即使是主要網站錯過,但它的重要(即使SSL目前很難利用漏洞)。

你可以使用幾乎任何類型的認證與webapi;基本認證;證書;你可以看看使用OAUTH風格的身份驗證(注意我說風格,因爲規範是如此鬆散的定義,它提供了幾乎每個選項和實現它的多種方式)。

首先我會看WebApi作爲選擇;你有沒有考慮過別的?如http://www.servicestack.net/包含認證適配器的整個範圍https://github.com/ServiceStack/ServiceStack/wiki/Authentication-and-authorization

其次將是有益的知道你的身份驗證以及它的認證(私有數據/上傳/訪問一些東西);以便得到一個包含「恰到好處的安全性」的答案。

表單身份驗證'可以',並假設你的客戶端是非瀏覽器的基礎上,你可以通過返回登錄服務和響應與formauthentication令牌,你需要保持在某種上下文使用期限;假設一旦軟件完成使用api就設置了超時,那麼下次用戶將不得不再次登錄以重用它。


至於web api/JS-Html前端去;引用自己。

由於它是一個JS應用它可能是值得考慮快速瀏覽一下OWASP 十大相對於JS

http://erlend.oftedal.no/blog/?blogid=125

A1 - Injection 
A2 - Cross Site Scripting (XSS) 
A3 - Broken Authentication and Session Management 
A4 - Insecure Direct Object References 
A5 - Cross Site Request Forgery (CSRF) 
A6 - Security Misconfiguration 
A7 - Insecure Cryptographic Storage 
A8 - Failure to Restrict URL Access 
A9 - Insufficient Transport Layer Protection 
A10 - Unvalidated Redirects and Forwards 

即使世界上好的帖子在這裏爲WebApi創建一個自定義授權過濾器http://www.west-wind.com/weblog/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter(如何使用代碼)

+0

謝謝你的詳細回覆,克里斯。該應用程序已經使用WebAPI構建,因此沒有其他選擇。我可以使用客戶端應用程序的JS調用訪問的方法,這些方法需要被限制爲登錄用戶。該應用程序只是一個閃存卡應用程序,沒有什麼可貴的。我只是不希望用戶通過電話發送明文密碼。你說我可以使用基本身份驗證 - 這是我現在擁有的,但我不喜歡瀏覽器窗口彈出,我不喜歡我不能讓用戶註銷。 – RobVious

+0

你可以通過js ala執行basic-auth http://stackoverflow.com/questions/9692067/jquery-ajax-calls-with-http-basic-authentication這個否定了瀏覽器窗口的使用;當然它的'線上',但你的使用場景有限,並採取了一個相對基本但重要的使用SSL的預防措施。 –

+0

這當然只有一條建議路線(如答案中)。表單身份驗證是可能的,可以通過使用表單身份驗證票證的web-api進行處理http://support.microsoft.com/kb/910443從這一點內置的.NET內容與MVC http://非常相似www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api –

相關問題