在 Asp.Net MVC 中验证自定义用户 class

Authenticate custom user class in Asp.Net MVC

我有一个系统使用内置身份系统来验证管理部分的用户。

我想让其他用户通过外部 Web 服务登录,但想知道我是否可以为他们创建一个不同的用户 class 并且仍然利用 [授权] 属性等内置功能。

假设自定义 class 如下所示:

public class CustomUser
{
    public string Name { get; set; }
    public string Ssn { get; set; }
}

我会将这个用户添加到一个角色中,例如 "customUser" 所以在控制器中我想像这样使用授权属性:

[Authorize(Roles="customUser")]
public ActionResult DoStuff()
{
    // do stuff
}

这可能吗,有一个自定义用户 class 并手动验证他吗?

当然可以。只需继承 ApplicationUser(或任何你命名为 IdentityUser 派生的 class):

public class CustomUser : ApplicationUser
{
    public string Name { get; set; }
    public string Ssn { get; set; }
}

但是,您不能像您的示例代码所建议的那样直接将它与 Authorize 一起使用。您需要:

  1. 在您的操作中进行自定义检查以验证用户类型。

  2. 为用户添加角色并通过该自定义角色授权。

  3. 创建自定义 AuthorizeAttribute 检查用户类型是否正确

更新

当您从 ApplicationUser 继承时,您将不会获得单独的 table。 EF 将向 dbo.AspNetUsers 添加一个 Discriminator 列,其值将是 "ApplicationUser" 或 "CustomUser",具体取决于保存的是哪个。当您从数据库中查询用户时,EF 将使用此列来实例化适当的 class。

需要注意的一件事是 UserManager 实际上是 UserManager<ApplicationUser> 的一个实例。它是一个通用的 class,因此当实例化时将 class UserManager 操作时,无论用户 class 被指定为类型参数。因此,如果您想使用 CustomUser,您将需要一个 UserManager<CustomUser> 的实例。