簡體   English   中英

ASP.NET身份和ASP.NET成員資格提供程序“Mashup”

[英]ASP.NET Identity & ASP.NET Membership Provider “Mashup”

我們有一個現有的Web應用程序,它是基於MVC和SQL成員資格提供程序構建的,用於用戶身份驗證。 該應用程序還包括管理員管理屏幕,用於創建/編輯用戶,重置密碼,激活帳戶等...這是一個相當成熟的系統,已經生產了大約2。5年。

我們現在有了通過API從系統中公開一些數據的新要求,我們將WebApi視為候選技術。

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

在現有的會員提供商用戶/密碼認證中以某種方式將角斗機用於web api auth mechs是可能的還是壞的。 ApplicationOAuthProvider有一個方法,看起來我可以通過替換行IdentityUser user = await userManager.FindAsync(context.UserName, context.Password); 通過調用MembershipProvider。 盡管如此,這似乎非常有說服力

思想和選項將不勝感激。

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

我認為你將花費盡可能多的時間將成員提供給新的身份,因為它需要正確地更新到新的Idenitty框架。

我已經完成了2個不同系統的升級,這些系統都不小(一個200K,另一個70K代碼行),用戶數量增加。 較小的系統花了我7個人日,大一個5天(我知道我第二次做什么 - )。 兩個系統都有擴展的用戶管理代碼,其中一個系統有辦法冒充管理員的另一個用戶。 一切順利,沒有停機時間。 用戶沒有注意到差異。
但升級后的用戶管理/身份驗證功能非常簡單,您可以立即花費5天的時間進行升級。 把這看作是投資 - ))

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

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

這可以通過實現自己的UserStore來完成。 我想雖然會有很多龍。 您必須仔細考慮所有其他方案並協調兩者:忘記密碼,確認電子郵件,登錄失敗計數和時間跨度等。 基本上,所有更新用戶數據的內容都必須經過考慮,並且可能在每組表中都要加倍。 如果你可以將列添加到現有的成員資格表中以支持可能有幫助的asp.net身份的界面,但在某些時候你最終會廢棄大部分數據訪問部分並實現一個完整的UserStore而不是你的一個委托原始的基於Entity Framework的代碼。

我想利用我們應用程序中現有的用戶/角色管理功能來創建和管理API帳戶。 但是,由於WebAPI的首選選項是使用ASP.NET身份(聲明/承載令牌等...),我對最佳選擇將會有些困惑。

在單個項目中與現有SQL成員資格提供程序和Web API混合使用並不是一個好主意。

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

Web API項目仍然可以使用SQL Membership provider的表。 但是,您需要使用成員資格提供程序編碼算法自行驗證用戶,並自行創建具有聲明的IPrincipal對象。 然后分配給Thread.CurrentPrincipal

對於基於令牌的身份驗證,您只需使用JSON Web令牌即可

更新:如果您有更多時間,可以使用此示例將SQL成員資格直接遷移到ASP.NET Identity。 然后,您可以將MVC和Web API保留在單個項目中,因為它們都使用ASP.NET標識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM