角色提供者/会员?如何在asp.net web api中?

cho*_*bo2 8 asp.net-membership asp.net-web-api simplemembership

我正在构建一个asp.net mvc web api应用程序,但不确定如何进行会员资格.

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

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

A user可以有很多角色,role可以有很多用户.

我正在使用EF来完成对数据库的几乎所有调用.

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

通过不做任何会员提供者,我失去了一些内置的功能,如User.IsInRole.我仍然可以使用,User.Identity.Name但我认为这是因为我设置的cookie.

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

谷歌搜索时我找到了"SimpleMembership",但还没读过多少内容.

User.Identity.Name如果我对用户进行身份验证,我可以使用我的webapi吗?

Kev*_*ans 4

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

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

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