我使用VS2013和Web API 2通過使用令牌身份驗證的SSL創建自託管(使用OWIN),REST式服務。雖然我不是新手開發人員,但這是我第一次看ASP.NET技術,請記住這一點。令牌身份驗證和自我託管ASP.NET Web API授權2 REST服務
我已經得到了一切或多或少的工作,除了身份驗證和授權部分。我完全理解認證用戶(誰是該用戶?)和授權已經通過身份驗證的用戶訪問資源(該用戶是否可以訪問此特定資源?)的區別。
一個非常簡單的我的身份驗證過程的概述如下(使得爲了簡潔一些假設):
- 未知客戶端連接到API,例如獲取api /值。
- 服務器響應一個401和這個響應頭:「WWW-Authenticate:Token」。
- 看到此消息後,未知客戶端知道在此處連接到不同的API端點:POST api/auth(路由到登錄功能),提供用戶名和密碼。
- 服務器將嘗試確定這是否爲有效用戶,並且可以根據憑證的有效性接受或拒絕用戶。
- (拒絕)服務器返回錯誤狀態碼(403?)。流程結束。
- (接受)服務器創建隨機令牌(例如GUID)並將其存儲在用戶記錄中。然後它將令牌發送給客戶端。
- 現在已通過身份驗證的客戶端重新連接到API,GET api/values,並且這次還提供令牌。
- 用戶將資源數據返回給客戶端。
- ...
- 用戶可以通過連接到他用於登錄的相同API註銷:POST api/auth(這次,他的請求將被路由到註銷功能)。這將從服務器中刪除令牌,並且客戶端也將不得不刪除它自己的令牌。
正如你可以看到,這是一個相對簡單的過程,但我無法找到任何具體的和簡單的例子來了解如何最好地使用自託管的Web API 2.
我做到這一點不需要註冊用戶或做任何密碼/角色管理等,並且沒有外部認證。所有有效的用戶都有相同的權限來訪問資源,並且他們已經通過一個單獨的進程在系統中創建,但我無法控制(我只能讀取他們的憑據進行驗證)。我發現的大多數例子都在討論我不需要的安全框架,所以我排除了使用以下任何一種方法:基本身份驗證,Windows身份驗證,表單身份驗證,個人帳戶,ASP.NET成員資格/身份,OAuth,Thinktecture或任何其他安全框架。
我已經閱讀了有關在消息處理程序和其他人中進行身份驗證的文章,這些定製的Authorize屬性過濾器中,而其他人甚至建議我應該使用新的(在Web API 2中)IAuthenticateFilter屬性。這很混亂。你可以請一個非常簡單的方式來實現我的認證目標?任何特定的代碼示例將不勝感激,即使它們只是框架實現或僞代碼。我只需要一些想法讓我開始。
遵循一個使用企業協議之一的既定框架具有很大的優勢 - 您將來可以輕鬆地與其他服務/提供商/公司進行整合。只要對他們說「我的服務使用oauth2令牌認證」或「我們使用ws-trust和ws-federation」。另一方面,從安全性或業務角度來看,定製安全協議可能被認爲是潛在的問題。我建議閱讀並遵循以下內容:http://www.apress.com/microsoft/asp-net/9781430257820 –
感謝您回覆Wiktor。你提到的這本書實際上已經訂購了!我將同時編寫服務器和(移動)客戶端,並且我將重新使用別人編寫的代碼來創建令牌,哈希等,這些令牌已經過多年的Veracode掃描進行了靜態驗證。我的結果代碼也將以這種方式進行掃描,所以希望它能夠捕捉到任何明顯的錯誤。確實,「滾動我自己」並不總是一個好主意,但是,由於我不需要管理帳戶或連接到外部授權提供商,所以我希望潛在問題可能會最小化。 – djikay