Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET身份和;ASP.NET成员资格提供程序“;“Mashup”;_C#_Asp.net_Asp.net Web Api_Asp.net Membership_Asp.net Identity - Fatal编程技术网

C# ASP.NET身份和;ASP.NET成员资格提供程序“;“Mashup”;

C# ASP.NET身份和;ASP.NET成员资格提供程序“;“Mashup”;,c#,asp.net,asp.net-web-api,asp.net-membership,asp.net-identity,C#,Asp.net,Asp.net Web Api,Asp.net Membership,Asp.net Identity,我们有一个现有的web应用程序,它是基于MVC和SQL成员资格提供程序构建的,用于用户身份验证。该应用程序还包括用于创建/编辑用户、重置密码、激活帐户等的管理员管理屏幕。。。这是一个相当成熟的系统,已投入生产约2.5年 我们现在有一个新的需求,即通过API公开系统中的一些数据,我们将WebApi作为候选技术 我遇到的一个问题是身份验证。我希望利用应用程序中现有的用户/角色管理功能来创建和管理API帐户。然而,由于WebAPI的首选选项是使用ASP.NET标识(声明/承载令牌等),我对最佳选项有点

我们有一个现有的web应用程序,它是基于MVC和SQL成员资格提供程序构建的,用于用户身份验证。该应用程序还包括用于创建/编辑用户、重置密码、激活帐户等的管理员管理屏幕。。。这是一个相当成熟的系统,已投入生产约2.5年

我们现在有一个新的需求,即通过API公开系统中的一些数据,我们将WebApi作为候选技术

我遇到的一个问题是身份验证。我希望利用应用程序中现有的用户/角色管理功能来创建和管理API帐户。然而,由于WebAPI的首选选项是使用ASP.NET标识(声明/承载令牌等),我对最佳选项有点困惑

以某种方式将现有成员资格提供者的用户/密码身份验证引入web api身份验证机制是可能的还是坏主意。
applicationAuthProvider
中有一个方法,看起来我可以通过替换行
IdentityUser user=await userManager.FindAsync(context.UserName,context.Password)进行操作并调用MembershipProvider。但这似乎很难理解


想法和选项将不胜感激。

这可以通过实现您自己的UserStore来实现。我想会有很多龙。您必须仔细考虑所有其他场景并协调这两个场景:忘记密码、电子邮件确认、登录失败计数和时间跨度,等等。基本上,所有更新用户数据的操作都必须仔细考虑,并且可能在每一组表中都要加倍进行。如果您可以将列添加到现有的成员资格表中,以支持asp.net标识的接口,这可能会有所帮助,但在某个时候,您将放弃大部分数据访问部分,并实现一个完整的UserStore,而不是您主要委托给基于实体框架的原始代码的UserStore

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

我想你会花很多时间让会员资格提供者了解新的身份,就像正确更新新的idenity框架一样

我已经在两个不同的系统中进行了升级,这两个系统都不小(一个200K,另一个70K行代码),用户数量都有所增加。较小的系统花了我7个人天,较大的系统花了我5天(我第二次知道我在做什么)。这两个系统都扩展了用户管理代码的数量,其中一个系统可以为管理员模拟另一个用户。一切顺利,没有停机。用户没有注意到差异。
但在升级后,用户管理/身份验证变得简单多了,您将很快获得5天的升级时间。将此视为一项投资——)

我看过MembershipProvider的源代码(在反编译程序中),很多东西都是静态的、混乱的、密封的,而且完全不可管理。我要说的是,转储它会更容易,而不是构建更多的遗留代码,只是为了维护即将消亡的库

换言之,更新所有东西比重复使用旧东西更容易

我想利用现有的用户/角色管理功能 在我们的应用程序中,创建和管理API帐户。然而 因为WebAPI的首选选项是使用ASP.NET标识 (索赔/不记名代币等)我有点困惑什么是最好的 选项将是

在单个项目中混合使用现有的SQL成员资格提供程序和Web API不是一个好主意

在我的场景中,我创建了一个单独的WebAPI2项目。然后我创建了一个单独的类库项目,将IoC容器保存在一个位置,Web应用程序和Web API都引用该类库

WebAPI项目仍然可以使用SQL成员资格提供程序的表。但是,您需要自己使用验证用户,并使用声明创建IPrincipal对象。然后分配给
线程.CurrentPrincipal

对于基于令牌的身份验证,您只需使用

更新:如果您有更多时间,可以使用将SQL成员身份直接迁移到ASP.NET Identity。然后,您可以将MVC和Web API保留在单个项目中,因为两者都使用ASP.NET标识