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