我有一个尚未发布的项目但我不会很快就会在几天前将其从mvc3移至mvc4并且在阅读时我看到了这个新的安全提供商SimpleMembership
。
我现在实施安全性的方法是使用MembershipProvider
和FormsAuthentication
:
要注册我使用的用户:
MembershipCreateStatus status;
Guid g = Guid.NewGuid();
Membership.CreateUser(model.User.Email.Trim(), model.Password.Trim(), model.User.Email.Trim(), null, null, true, g, out status);
if (status == MembershipCreateStatus.Success)
...
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
tUser.Email,
DateTime.Now,
DateTime.Now.AddDays(60),
true,
userData);
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Response.Cookies.Add(faCookie);
...
但是,当我看到SimpleMembership看起来更清洁,我想将项目移动到它时
但我对此有一些疑问:
1)我对所有数据库操作使用存储过程我根本不使用EF。如果我使用SimpleMembership可以在没有EF的情况下使用它吗?
2)我是否需要为现实世界的应用程序构建自定义SimpleMembership?
3)我看到它种子数据库创建表。我有我的表Users, Profiles, Roles and UsersInRoles
我可以将它应用于我的自定义架构吗?
4)如果我想调用WebSecurity.CreateAccount(...)
并且我想从域项目中调用一些我的自定义方法,该项目负责调用创建用户的存储过程,我必须制作它是自定义的,如果我必须这样做,是否有一些资源可以解释如何为用户和角色定制它?
答案 0 :(得分:2)
为了理解SimpleMembership及其如何从以前的成员资格实施演变而来,我建议阅读原始参考“Using SimpleMembership With ASP.NET WebPages (Matthew Osborn)”,以及我对“What is MVC4 security all about?”的更详细解答。更好地理解它。总结这些参考文献:
SimpleMembershipProvider
和SimpleRoleProvider
SimpleMembershipProvider
ExtendedMembershipProvider
抽象基类向原始MembershipProvider添加新功能,例如与开箱即用的OAuth提供程序集成webpages_Membership
,webpages_OAuthMembership
,webpages_Roles
,webpages_UsersInRoles
)和一个({{1} })你的结构是你想要的UserProfile
助手类一起使用以添加新功能WebSecurity
表中的每列更易管理的属性(可使用EF完全自定义)回答您的具体问题:
1)我对所有数据库操作使用存储过程我根本不使用EF。如果我使用SimpleMembership可以在没有EF的情况下使用它吗?
您通常不会直接与前缀为UserProfile
的表进行交互,因为webpages_
,Membership
等中存在API级别功能,以执行您需要的所有业务功能。但是,没有什么可以阻止您通过存储过程与WebSecurity
进行交互,如果您不想利用API,您甚至可以通过sprocs与UserProfile
表进行交互(但是如果你这样做,你只会复制SimpleMembership的所有好处)。
2)我是否需要为现实世界的应用程序构建自定义SimpleMembership?
这在很大程度上取决于你想做什么,但到目前为止,我还没有必要为任何真实世界的应用程序做这件事。我已经构建并添加到现有的API中,但没有替换它们。
3)我看到它种子数据库创建表。我有我的表用户,配置文件,角色和UsersInRoles我可以将它应用于我的自定义架构?
如果您要迁移到SimpleMembership,则必须将这些数据移植到表webpages_
,webpages_Membership
,webpages_OAuthMembership
,webpages_Roles
和webpages_UsersInRoles
。但请注意UserProfile
可以调用任何您想要的内容,您不必将其称为UserProfile
。
4)如果我想调用WebSecurity.CreateAccount(...)并且我想从域项目中调用一些我的自定义方法,该项目负责调用创建用户的存储过程,我必须使其自定义,如果我必须要做的是有一些资源解释如何为用户和角色定制?
有点难以理解您的要求,但UserProfile
执行以下操作:
WebSecurity.CreateAccount
和webpages_Membership
,UserProfile
添加属性
如果您想在整个数据库中执行其他操作,则需要在致电WebSecurity.CreateUserAndAccount
后拨打该电话。您可以使用WebSecurity.CreateAccount
但是,如果你想通过一次调用TransactionScope
来包装这一切,并让它调用你自己的域方法和存储过程,你必须通过继承WebSecurity.CreateAccount
来创建自己的提供者(或者来自SimpleMembershipProvider
)。当ExtendedMembershipProvider
然后调用WebSecurity.CreateAccount
时,它将遵循您的自定义逻辑
<强>摘要强>
我会迁移吗? SimpleMembership的好处是:
ExtendedMembershipProvider.CreateAccount
形式的高级业务功能API,以及WebSecurity
Authorize
属性如果这些可以帮助您,那么请迁移,否则将您的开发时间用于应用程序的新功能。
如果你决定迁移,那么“Migrating Legacy Apps to the New SimpleMembership Provider (Paul Brown)"很有用,总结如下:
Membership
,为每个属性设置一个字段,用于存储在xml中的旧用户配置文件属性UserProfile
表迁移到aspnet_
表webpages_
模式(请参阅the footnote to my answer here了解如何执行此操作)答案 1 :(得分:0)