一般情況下,在我們做訪問權限管理的時候,會把用戶的正確登錄后的基本信息保存在Session中,以后用戶每次請求頁面或接口數據的時候,拿到Session中存儲的用戶基本信息,查看比較他有沒有登錄和能否訪問當前頁面。
Session的原理,也就是在服務器端生成一個SessionID對應了存儲的用戶數據,而SessionID存儲在Cookie中,客戶端以后每次請求都會帶上這個Cookie,服務器端根據Cookie中的SessionID找到存儲在服務器端的對應當前用戶的數據。
FormsAuthentication是微軟提供給我們開發人員使用,做身份認證使用的。通過該認證,我們可以把用戶Name 和部分用戶數據存儲在Cookie中,通過基本的條件設置可以,很簡單的實現基本的身份角色認證。
配置項描述:
<authentication mode="Forms"><formsname=".ASPXAUTH"loginUrl="login.aspx"defaultUrl="default.aspx"protection="All"timeout="30"path="/"requireSSL="false"slidingExpiration="false"enableCrossAppRedirects="false"cookieless="UseDeviceProfile"domain=""/>
</authentication>
以上代碼使用的均是默認設置,換言之,如果你的哪項配置屬性與上述代碼一致,則可以省略該屬性例如<forms name="MyAppAuth" />。下面依次介紹一下各種屬性:
- name----Cookie的名字。Forms Authentication可能會在驗證后將用戶憑證放在Cookie中,name屬性決定了該Cookie的名字。通過FormsAuthentication.FormsCookieName屬性可以得到該配置值(稍后介紹FromsAuthentication類)。
- loginUrl---登錄頁的URL。通過FormsAuthentication.LoginUrl屬性可以得到該配置值。當調用FormsAuthentication.RedirectToLoginPage()方法時,客戶端請求將被重定向到該屬性所指定的頁面。loginUrl的默認值為“login.aspx”,這表明即便不提供該屬性值,ASP.NET也會嘗試到站點根目錄下尋找名為login.aspx的頁面。
- defaultUrl--默認頁的URL。通過FormsAuthentication.DefaultUrl屬性得到該配置值。
- protection--Cookie的保護模式,可取值包括All(同時進行加密和數據驗證)、Encryption(僅加密)、Validation(僅進行數據驗證)和None。為了安全,該屬性通常從不設置為None。
- timeout---Cookie的過期時間。
- path-----Cookie的路徑。可以通過FormsAuthentication.FormsCookiePath屬性得到該配置值。
- requireSSL——在進行Forms Authentication時,與服務器交互是否要求使用SSL。可以通過FormsAuthentication.RequireSSL屬性得到該配置值。
- slidingExpiration——是否啟用“彈性過期時間”,如果該屬性設置為false,從首次驗證之后過timeout時間后Cookie即過期;如果該屬性為true,則從上次請求該開始過timeout時間才過期,這意味著,在首次驗證后,如果保證每timeout時間內至少發送一個請求,則Cookie將永遠不會過期。通過FormsAuthentication.SlidingExpiration屬性可以得到該配置值。
- enableCrossAppRedirects——是否可以將以進行了身份驗證的用戶重定向到其他應用程序中。通過FormsAuthentication.EnableCrossAppRedirects屬性可以得到該配置值。為了安全考慮,通常總是將該屬性設置為false。
- cookieless——定義是否使用Cookie以及Cookie的行為。Forms Authentication可以采用兩種方式在會話中保存用戶憑據信息,一種是使用Cookie,即將用戶憑據記錄到Cookie中,每次發送請求時瀏覽器都會將該Cookie提供給服務器。另一種方式是使用URI,即將用戶憑據當作URL中額外的查詢字符串傳遞給服務器。該屬性有四種取值——UseCookies(無論何時都使用Cookie)、UseUri(從不使用Cookie,僅使用URI)、AutoDetect(檢測設備和瀏覽器,只有當設備支持Cookie并且在瀏覽器中啟用了Cookie時才使用Cookie)和UseDeviceProfile(只檢測設備,只要設備支持Cookie不管瀏覽器是否支持,都是用Cookie)。通過FormsAuthentication.CookieMode屬性可以得到該配置值。通過FormsAuthentication.CookiesSupported屬性可以得到對于當前請求是否使用Cookie傳遞用戶憑證。
- domain——Cookie的域。通過FormsAuthentication.CookieDomain屬性可以得到該配置值。?
登錄代碼:
[HttpPost]
public ActionResult LogOn(LogOnModel model)
{if (ModelState.IsValid){if (model.UserName == "username" && model.Password == "password"){FormsAuthentication.RedirectFromLoginPage(model.UserName, model.RememberMe);}}return View("logon failed!");
}
退出代碼:
public ActionResult LogOff()
{//FormsService.SignOut();FormsAuthentication.SignOut();return RedirectToAction("Index", "Home");
}