5

我們有一個已經建立在MVC & SQL成員資格提供用戶身份驗證的現有Web應用程序。該應用程序還包括用於創建/編輯用戶,重置密碼,激活帳戶等的管理員管理屏幕......這是一個相當成熟的系統,已經投入使用約2.5年。ASP.NET身份和ASP.NET成員資格提供「混搭」

我們現在有一個新的要求通過API暴露從系統中的一些數據,我們正在尋找的WebAPI作爲候選技術。

我遇到的問題之一是身份驗證。我想在我們的應用程序中利用現有的用戶/角色管理功能來創建和管理API帳戶。然而,因爲WebAPI的首選選項是使用ASP.NET身份(聲明/承載令牌等),所以我對最佳選擇會有些困惑。

是否有可能或一個壞主意,不知何故鞋拔在現有的成員資格提供用戶名/密碼認證到Web API AUTH機甲。 ApplicationOAuthProvider中有一個方法,看起來像我可以通過調用MembershipProvider替換行IdentityUser user = await userManager.FindAsync(context.UserName, context.Password);來操作。這似乎很cludgy雖然。

思想&選項將不勝感激。

回答

1

這可以通過實現您自己的UserStore來完成。我認爲會有很多龍。您必須考慮所有其他方案並協調兩者:忘記密碼,確認電子郵件,登錄失敗次數和時間段等。基本上,更新用戶數據的所有內容都必須經過深思熟慮,並且可能會在每組表格中完成。如果您可以將列添加到現有的成員資格表中以支持可能有幫助的asp.net標識的界面,但在某些時候,您最終會取消大部分數據訪問部分並實施完整的UserStore,而不是主要委託給最初的基於實體框架的代碼。

3

不是一個真正的答案,只是我的0.02美分。

我想你會花盡可能多的時間裏上演的MembershipProvider到新的標識,因爲它會採取適當更新到新Idenitty框架。

我已經做了升級在2個不同的系統,無論是不小(一個200K,70K另一行代碼)與用戶的擴展數量。較小的系統花了我7個人日,更大的一個5天(我知道我第二次做什麼 - )。這兩個系統都具有擴展的用戶管理代碼數量,其中一個系統可以爲管理員模擬另一個用戶。一切工作順利,沒有停機。用戶沒有注意到差異。
但是升級後,用戶管理/身份驗證的事情變得非常容易,您將很快花費5天時間進行升級。把這看作是一種投資 - ))

我查看了MembershipProvider的源代碼(在反編譯器中),很多東西都是靜態的,雜亂的,密封的,而且很簡單,難以管理。我會說它將更容易轉儲它,而不是構建更多的遺留代碼,只是爲了維護臨死的庫。

換句話說,更新所有內容會更容易,而不是嘗試重新使用舊內容。

1

我想在我們的應用程序中利用現有的用戶/角色管理功能 來創建和管理API帳戶。然而 因爲WebAPI的首選選項是使用ASP.NET身份 (聲明/承載令牌等......)我對最佳的選項是什麼會有點困惑。

在單個項目中混合使用現有的SQL Membership Provider和Web API並不是一個好主意。

在我的場景中,我創建了一個單獨的Web API 2項目。然後,我創建了一個單獨的類庫項目,以將IoC容器保存在一個位置,並且Web App和Web API都引用該類庫。

Web API項目仍然可以使用SQL成員資格提供程序的表。但是,您需要使用Membership Provider Encode Algorithm自己驗證用戶,並自行創建帶有聲明的IPrincipal對象。然後分配到Thread.CurrentPrincipal

對於基於令牌的認證,您可以使用JSON Web Token

更新時間:如果你有更多的時間,你可以在SQL成員遷移直奔ASP.NET身份使用this example。然後,您可以將MVC和Web API保留在單個項目中,因爲兩者都使用ASP.NET Identity。