【问题标题】:Authenticate custom user class in Asp.Net MVC在 Asp.Net MVC 中验证自定义用户类
【发布时间】:2017-07-01 15:00:50
【问题描述】:

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

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

假设自定义类如下所示:

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

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

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

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

【问题讨论】:

    标签: c# authentication asp.net-mvc-5 asp.net-identity-2 custom-authentication


    【解决方案1】:

    当然。只需从 ApplicationUser 继承(或任何您命名的 IdentityUser 派生类):

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

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

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

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

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

    更新

    当您从ApplicationUser 继承时,您不会获得单独的表。 EF 将向dbo.AspNetUsers 添加一个Discriminator 列,该列的值将是“ApplicationUser”或“CustomUser”,具体取决于保存的是哪个。然后,当您从数据库中查询用户时,EF 将使用此列来实例化相应的类。

    需要注意的一点是UserManager 实际上是UserManager<ApplicationUser> 的一个实例。它是一个泛型类,因此在实例化时将任何用户类指定为类型参数都将是 UserManager 操作的类。因此,如果您想使用CustomUser,您将需要一个UserManager<CustomUser> 的实例。

    【讨论】:

    • 好的,太棒了。我只是没有意识到如何保存这个自定义用户并对他进行身份验证。我将为他创建一个新的数据库表,其中包含所有 CustomUser 字段和一些 ApplicationUser 字段。我可以创建 CustomUser 并使用身份 UserManager 进行身份验证吗?
    • 非常感谢您的帮助。如果你不介意,我还有最后一个问题。我是否需要创建一个新的 SignInManager 才能手动验证 CustomUser?或者有更简单的方法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多