2013-05-21 97 views
8

我正在構建一個asp.net mvc web api應用程序,並不確定如何執行會員資格。角色提供者/會員資格?如何在asp.net web api中?

在我目前的項目我有這個

我自己Users TableRole Table我不使用asp.net成員,因爲它帶來太多的行李,不適合我要怎麼設計我的數據庫(相信我能來它,但它只是似乎想太多的工作)

一個user可以有許多角色role可以有很多用戶

我使用EF來完成我對數據庫的幾乎所有調用。

在過去的項目中,我自己創建了Authorize Attribute我自己調用了哪些數據庫,並檢查了用戶是否處於該控制器/操作方法允許的正確角色。

通過不做任何會員供應商,我失去了一些內置功能,如User.IsInRole。我仍然能夠使用User.Identity.Name,但我認爲這是因爲我設置了cookie。

什麼是現在在asp.net mvc 4/web api中最好的做法?

雖然使用谷歌搜索,我發現「SimpleMembership」,但還沒有讀取太多。

在旁註中,如果我對用戶進行了身份驗證,是否可以使用User.Identity.Name與我的webapi?

回答

4

這是article that describes how to create a custom authorize attribute for Web API's using SimpleMembership。您不必使用SimpleMembership,雖然它非常靈活且易於使用。只要您的服務可以驗證某個特定用戶是否在某個角色中,登錄和註銷用戶並驗證他們是否已通過身份驗證,則可以在本文中採用相同的概念並使用您的成員資格服務。

如果您的服務沒有驗證它們是否已通過身份驗證,則可以使用User.Identity.IsAuthenticated,並且可以使用User.Identity.Name來獲取當前登錄的用戶名;假設您的服務在用戶登錄時正確設置了Thread.CurrentPrincipal。建議您設置HttpContext.Current.User。當然,如果你使用SimpleMembership,你不必擔心這一點。

此自定義授權屬性支持表單身份驗證和基本身份驗證,以防將API暴露給公衆。它與控制器上使用的授權屬性不同,因爲如果未授權,它將返回一個禁止訪問的HTTP狀態代碼,如果未授權,則返回未授權狀態;而不是重定向到登錄頁面。

0

您仍然可以編寫自定義成員資格提供程序並僅實現要使用的方法。就User.IsInRole而言,您可以通過繼承RoleProvider類並將其註冊到web.config中來編寫自定義角色提供程序。

如果您不想使用這些內置功能中的任何一個,那麼請不要使用它們,而不要寫User.IsInRoleMyService.IsInRole。無論您是要推出自定義提供程序並使用內置函數,還是隻編寫一個能夠爲您處理該問題的服務層,這都是個人喜好的問題。我認爲這個選擇取決於你應該考慮的許多因素,以及哪些因素與你項目的具體情況有關。例如,如果將來您打算讓其他外部開發人員在此項目上工作,那麼選擇自定義成員資格和角色提供者會更明智一些,因爲這些開發人員可能更熟悉此API,而不必學習自定義服務層。

+0

User.Identity.Name如何在asp.net webapi中設置?在以前的mvc 3應用程序中,我在自定義授權屬性中使用了:httpContext.User.Identity.Name,然後使用我自己的服務層和該名稱來查找用戶具有的權限。我可以使用httpContext.User.Identity.Name,因爲我認爲這是由Cookie設置的嗎? – chobo2

+0

是的,您可以擁有自定義授權屬性,並將'Thread.CurrentPrincipal'設置爲相應的用戶。看看我使用Basic身份驗證使用成員資格提供程序編寫的示例實現:http://stackoverflow.com/a/11536349/29407在此示例中,我使用了自定義委派處理程序,但是如果您使用授權過濾器也想要。 –

+0

很酷,這是非常有幫助的。但有幾個問題。爲什麼是異步?爲什麼你必須註冊處理程序(我沒有和User.Identity被填充,但我沒有做異步),爲什麼填充角色在不知道如何訪問它們。 – chobo2

相關問題