在 Asp.Net MVC 中验证自定义用户类
Posted
技术标签:
【中文标题】在 Asp.Net MVC 中验证自定义用户类【英文标题】:Authenticate custom user class in 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
这可能吗,有一个自定义用户类并手动验证他吗?
【问题讨论】:
【参考方案1】:当然。只需从 ApplicationUser
继承(或任何您命名的 IdentityUser
派生类):
public class CustomUser : ApplicationUser
public string Name get; set;
public string Ssn get; set;
但是,您不能像示例代码所建议的那样直接将其与 Authorize
一起使用。你要么需要:
在您的操作中执行自定义检查以验证用户类型。
向用户添加角色并通过该自定义角色进行授权。
创建一个自定义的AuthorizeAttribute
,检查用户的类型是否正确
更新
当您从ApplicationUser
继承时,您不会获得单独的表。 EF 将向dbo.AspNetUsers
添加一个Discriminator
列,该列的值将是“ApplicationUser”或“CustomUser”,具体取决于保存的是哪个。然后,当您从数据库中查询用户时,EF 将使用此列来实例化相应的类。
需要注意的一点是UserManager
实际上是UserManager<ApplicationUser>
的一个实例。它是一个泛型类,因此在实例化时将任何用户类指定为类型参数都将是 UserManager
操作的类。因此,如果您想使用CustomUser
,您将需要一个UserManager<CustomUser>
的实例。
【讨论】:
好的,太棒了。我只是没有意识到如何保存这个自定义用户并对他进行身份验证。我将为他创建一个新的数据库表,其中包含所有 CustomUser 字段和一些 ApplicationUser 字段。我可以创建 CustomUser 并使用身份 UserManager 进行身份验证吗? 非常感谢您的帮助。如果你不介意,我还有最后一个问题。我是否需要创建一个新的 SignInManager 才能手动验证 CustomUser?或者有更简单的方法吗?以上是关于在 Asp.Net MVC 中验证自定义用户类的主要内容,如果未能解决你的问题,请参考以下文章