8

我正在构建一个 asp.net mvc web api 应用程序,但不知道如何做会员。

在我目前的项目中,我有这个

我自己的Users TableRole Table我没有使用 asp.net 会员资格,因为它带来了太多的包袱,不符合我想要设计我的数据库的方式(当然我可以做到,但它似乎需要做很多工作)

一个 user可以有很多角色,一个role可以有很多用户

我正在使用 EF 执行几乎所有对数据库的调用。

在过去的项目中,我自己Authorize Attribute做了我自己对数据库的调用,并检查了用户是否处于正确的角色,因为该控制器/操作方法允许使用该角色。

由于不做任何会员提供程序,我失去了一些内置功能,例如User.IsInRole. 我仍然可以使用User.Identity.Name,但我认为那是因为我设置了 cookie。

现在在 asp.net mvc 4/web api 中执行此操作的最佳实践方法是什么?

在谷歌搜索时,我发现了“SimpleMembership”,但还没有深入了解它。

附带说明一下,如果我对用户进行了身份验证,我可以User.Identity.Name与我的 webapi 一起使用吗?

4

2 回答 2

4

这是一篇文章,描述了如何使用 SimpleMembership 为 Web API 创建自定义授权属性。您不必使用 SimpleMembership,尽管它非常灵活且易于使用。您可以采用本文中的相同概念并改用您的会员服务,只要您的服务可以验证特定用户是否处于角色中、登录和注销用户,并验证他们是否已通过身份验证。

如果您的服务未验证它们是否经过身份验证,您可以使用 User.Identity.IsAuthenticated 并且您可以使用 User.Identity.Name 获取当前登录的用户名;假设您的服务在用户登录时正确设置了 Thread.CurrentPrincipal。设置 HttpContext.Current.User 也是一种推荐做法。当然,如果您使用 SimpleMembership,则不必担心这些。

此自定义授权属性支持表单身份验证和基本身份验证,以防您将 API 公开给公众。它与控制器上使用的授权属性不同,如果未授权则返回 HTTP 状态码 Forbidden,如果未通过身份验证则返回 Unauthorized;而不是重定向到登录页面。

于 2013-05-22T20:34:02.017 回答
0

您仍然可以编写自定义成员资格提供程序并仅实现您想要使用的方法。就这一点而言,您可以通过从类继承并将其注册到您的 web.config 中User.IsInRole来编写自定义角色提供程序。RoleProvider

而且,如果您不想使用任何这些内置功能,那么请不要使用它们,而不要编写User.IsInRolewrite MyService.IsInRole。无论您是想滚动自定义提供程序并使用内置函数还是只是编写一个服务层来为您处理,这实际上都是个人喜好问题。我认为选择将取决于您应该考虑的许多因素,这些因素与您的项目细节有关。例如,如果将来您打算让其他外部开发人员参与该项目,那么选择自定义成员资格和角色提供者会更明智,因为这些开发人员可能会更熟悉此 API 而不必学习您的自定义服务层。

于 2013-05-21T20:52:06.577 回答