0

我有一个系统使用内置的Identity系统为管理部分的用户进行身份验证。在Asp.Net MVC中验证自定义用户类

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

比方说,自定义类看起来是这样的:

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

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

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

这是可能的,有一个自定义的用户类和手动验证他?

回答

0

当然。从ApplicationUser(或任何你叫你的IdentityUser派生类)只是继承:

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

但是,你不能直接与Authorize喜欢你的示例代码表明使用它。您需要:

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

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

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

UPDATE

当您从ApplicationUser继承,你不会得到一个单独的表。 EF将向dbo.AspNetUsers添加一个Discriminator列,该列将具有“ApplicationUser”或“CustomUser”的值,具体取决于保存的内容。当从数据库查询用户时,EF将使用此列来实例化适当的类。

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

+0

好的,太棒了。我只是没有意识到如何保存这个自定义用户并验证他。我将有一个新的数据库表与他的所有CustomUser字段和一些ApplicationUser字段。我可以创建CustomUser并使用身份UserManager进行身份验证吗? – joks

+0

查看上面的更新。 –

+0

非常感谢您的帮助。如果你不介意,我还有最后一个问题。我是否需要创建一个新的SignInManager才能手动验证CustomUser?还是有更简单的方法来做到这一点? – joks