2013-10-26 212 views
1

我正在使用backbone.js和web api構建應用程序。 JS客戶端將發送ajax請求來訪問API。構建一個API非常簡單,但我想爲API實現身份驗證和授權。基於令牌的授權Web API

我打算在驗證成功後返回一個令牌,並將此令牌用於進一步的請求。該令牌將在HTTP授權標頭中傳遞。 我的要求如下 1)驗證每個請求的令牌並獲取用戶ID。 2)使用獲取的用戶ID進一步操作。

可以使用自定義操作過濾器來處理第一位,其中永久標記可以針對數據庫進行驗證。 但我無法找到任何樣本或示例做第二位。我想從獲得的令牌中獲得一個用戶標識,並進一步處理它。 有沒有辦法做到這一點?

等待的建議或想法。任何代碼示例都會有幫助。提前致謝。

+0

你可以看看我的答案在這裏http://stackoverflow.com/questions/19269543/asp-net-web-api-for-user-authentication/19288696 – Rolfvm

回答

0

我強烈建議使用OAuth。無論如何,您可以在會話中設置令牌和用戶信息,並在隨後的調用中使用它們。即如果會話處於活動狀態且用戶信息存在,則使用它們,否則授權和認證用戶(可能通過OAuth),並且如果它是有效的,則將它們存儲在會話中以在隨後的調用中使用。

+6

爲什麼他應該使用OAuth,它是如何相關的對這個問題?只是放棄這樣的名字,沒有任何進一步的理由,爲什麼真的不幫助任何人。 –

1

可以這樣設置Thread.CurrentPrincipal在成功令牌驗證:

IPrincipal principal = new GenericPrincipal(new GenericIdentity(username), null); 

Thread.CurrentPrincipal = principal; 
// if we're running in IIS... 
if (HttpContext.Current != null) 
    HttpContext.Current.User = principal; 

主要可能也是實現System.Security.Principal.IPrincipal接口的自定義類的一個實例(爲了能夠使其用戶ID相關聯) 。

我還建議您使用DelegatingHandler而不是用於標記驗證的操作篩選器,以便在消息生命週期中儘可能早地設置當前主體。另外,用這種方法,您不必使用動作過濾器屬性來修飾每個動作方法/控制器。

+0

:謝謝...我會在http://stackoverflow.com/questions/1064271/asp-net-mvc-set-custom-iidentity-or-iprincipal上試試這個.... – prashant