Should I use the built-in membership provider for an ASP .NET MVC application?

后端 未结 5 364
醉话见心
醉话见心 2020-12-24 03:40

I\'ve been using a custom membership provider for authentication in all my web form applications till now. I\'m about to start developing my first website using MVC. I\'m

相关标签:
5条回答
  • 2020-12-24 04:00

    If you have to ask, you shouldn't be writing your own provider. Doing security well is really hard. Doing it wrong is incredibly easy.

    But the good news is that what you want is incredibly common, and there are tested, off-the-shelf tools which already do it. An example is Janrain. There are others, too. Use an existing, proven tool whenever possible.

    0 讨论(0)
  • 2020-12-24 04:11

    The recently introduced SimpleMembershipProvider addresses many issues with the old asp.net membership. Namely ease of use and control over User table schema. This should be the starting point for any new apps (as of 11/2012).

    See the below link for a primer on SimpleMembershipProvider along with a decent history on asp.net membership.

    http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx

    0 讨论(0)
  • 2020-12-24 04:12

    Personally, I hate using the ASP.NET Membership provider that's available in the core framework ... when it persists to a SQL SERVER database. All the tables and views are such an overkill for a single website. For a hosting company? .. maybe ... but for all the enterprise sites I've done .. it's been such a fraking overkill and hassle. As to the actual provider interface, etc ... it's very good .. but still very hardcore, etc. An overkill for simple-medium sites, IMO.

    So personally, I would use some simple custom code to handle membership persistence for most basic-medium websites.

    This then segues to your second question: OpenId. Use Andrew Arnott's DotNetOpenAuth .NET framework -> it litterally Kicks Serious Ass (tm). Using this is independent of HOW you save the user membership data to a repository. Ie. if you go ahead and use the Sql Server + ASP.NET Membership provider, you can still (and should) use DotNetOpenAuth. If you have a simple, custom way to save user details to a database (which is what I do), you can also still use DotNetOpenAuth -- the two are independent of each other.

    So, IMO, don't use the overcomplicated ASP.NET Membership + Sql Server stuff but a simple table or two to save your own user details. Next, you MUST use DotNetOpenAuth for any OpenId stuff (StackOverflow uses DotNetOpenAuth to handle their OpenId login).

    Good Luck :)

    (I'm sure my opnions of the ASP.NET Membership provider + Sql Server to persist that info will cause a few people to nerd-rage, here).

    0 讨论(0)
  • 2020-12-24 04:19

    Take a look at what's happening with NerdDinner. They've recently (6 months ago) integrated with OpenID, with Google, Yahoo as featured providers. They're still allowing all their 'native' logins as well. Here's an example of a site allowing the user to authenticate in different ways.

    If you can mirror some of their functionality, you'd be able to roll in Facebook, OpenAuth, etc. The big benefit is that it's already been implemented in ASP.NET MVC, and you'd just have to borrow some of that implementation.

    0 讨论(0)
  • 2020-12-24 04:24

    Here is an option and one that I use successfully.

    You essentially have a single user which can be authenticated multiple ways.

    Using the built in provider, which you could of course switch out at any time, does not preclude you from authenticating that user multiple ways.

    When a user authenticates with OpenID, Facebook, etc. match that login against a table that matches the specific login method and identity to the Forms identity and just set the set the user as logged in with their canonical Membership user name.

    If a new user authenticates to your site and doesn't have an account just create one in the membership provider automatically. Set the password to some random garbage because they'll never use it. Let them continue to associate multiple login types with it as well.

    If a user wants to then also have a direct login just use the standard Membership provider password reset mechanisms and provide them with one.

    Long story short: use the built in mechanism for now. It doesn't stop you from doing what you want to do.

    0 讨论(0)
提交回复
热议问题