2016-02-27 46 views

回答

3

不,請不要將其保存在會話變量中。事實上,我會爭辯你應該儘量不要使用任何會話。儘量保持HTTP通信儘可能無狀態。

對於ASP.NET MVC認證,你有2個選擇,但最終,兩端向上的工作以同樣的方式:通過寫一個加密身份驗證cookie的瀏覽器登錄成功用戶後

在OP的評論中提到了更新的備選方案:Microsoft.AspNet.Identity。要使用這個,你應該使用OWIN流水線的ASP.NET MVC的新版本(雖然我不知道你是否有)。較舊的替代方案被稱爲Forms Authentication,我相信它可以與除版本6(新vNext/core 1.0之外的任何版本的MVC)一起使用。

當您成功地將這兩個工具之一集成到您的MVC應用程序中時,在用戶登錄後,您的Controller將具有非空UserIPrincipal類型的屬性。您可以使用此屬性來確定用戶是否被認證:

// in a controller 
bool isThereAUserLoggedIn = this.User != null && this.User.Identity.IsAuthenticated; 

如果您使用的是較新的Microsoft.AspNet.Identity,那麼這個IPrincipal User屬性將被實現爲ClaimsPrincipal與一個或多個ClaimsIdentity小號。表單身份驗證不會這樣做,所以如果您想要聲明或社交登錄等,請使用Microsoft.AspNet.Identity。

1

這是傳統上在ASP.NET中完成的方式,我認爲使用ASP.NET Identity程序包更好更安全。

ASP.NET身份處理各地的用戶帳戶的所有方面,用於在Web應用程序:

  • 數據庫用戶,包括角色和更多
  • 用戶註冊和管理,如登記,電子郵件驗證,登錄記住我的選擇,忘記了我的密碼操作等等。
  • 用戶認證&授權

只是爲了讓事情變得更清晰,認證意味着發出請求的用戶實際上是一個有效的應用程序的用戶和授權意味着用戶必須執行的權力要求的行動。

實際上,當用戶登錄時,Identity會自動保留該信息並使其在User屬性下的所有控制器和視圖中都可用。所以你隨時知道哪個用戶提出了請求。 Identity還爲每個請求提供用於用戶身份驗證和授權的cookie。

要檢查用戶認證使用User.Identity.IsAuthenticated視圖Authorize屬性在控制器

[Authorize] 
public ActionResult Create(...){ ... } 

上面使用Authorize屬性將僅允許註冊用戶以請求這一頁。

這也是很常見的擴展應用程序的功能,包括用戶和用戶授權角色。標識創建一個「用戶」表,一個「角色」表以及它們之間的多對多關係。給用戶分配角色後,您可以通過在視圖,並在控制器使用User.Identity.IsInRole("YourRoleName")批准他們的請求:

[Authorize("YourRoleName")] 
public ActionResult Create(...){ ... } 

以上使用Authorize屬性將只允許具有「YourRoleName註冊用戶「請求這個頁面的角色。在任何情況下,如果身份驗證失敗或授權請求將提示登錄頁面。

ASP.NET身份使用簡單,它的工作原理和擴展應用程序的成員身份功能都很容易,通過使用它提供的許多工具並重寫它的類來爲它們提供更具體或更復雜的行爲。

您將在網上找到關於如何使用它或一步一步指南的無限幫助。

相關問題