基於窗體的身份驗證

2021-09-05 15:30:26 字數 3918 閱讀 3500

基於窗體的身份驗證是一項 asp.net 身份驗證服務,它使應用程式能夠提供自己的登入使用者介面並進行自己的憑據驗證。asp.net 對使用者進行身份驗證,將未經身份驗證的使用者重定向到登入頁,並執行所有必要的 cookie 管理。這種身份驗證是許多**使用的流行方法。

應用程式必須配置為使用基於窗體的身份驗證,方法是將設定為forms,並拒絕匿名使用者訪問。下面的示例演示如何在所需應用程式的 web.config 檔案中完成此操作:

管理員使用基於窗體的身份驗證來配置要使用的 cookie 的名稱、保護型別、用於登入頁的 url、cookie 有效的時間長度,以及用於已發出的 cookie 的路徑。下表顯示元素的有效屬性,該元素是下面的示例中顯示的元素的子元素:

屬性說明

cookieless

asp.net 2.0 forms 身份驗證可以將 forms 身份驗證票儲存在 cookie 中也可以以無 cookie 的表示形式儲存在 url 上。usedeviceprofile的預設值表示 asp.net 根據預先計算得到的瀏覽器配置檔案來確定儲存票證的位置。autodetect選項使 asp.net 動態確定瀏覽器是否支援 cookie。useuriusecookies分別強制實施無 cookie 票證和有 cookie 票證。

defaulturl

指定在成功登入後,請求將重定向到的預設 url。在登入後進行重定向時,如果重定向 url 對於 forms 身份驗證不可用,則使用此值。

domain

在 asp.net 2.0 中,forms 身份驗證允許以查詢字串變數或窗體 post 變數的形式在應用程式之間傳遞 forms 身份驗證票。將此屬性設定為 true 可使formsauthenticationmodule能夠從查詢字串或窗體 post 變數提取票證。

loginurl

指定未經身份驗證的使用者的請求將被重定向到的 url。該 url 可以在同一臺計算機上或在遠端計算機上。如果是在遠端計算機上,則兩台計算機上machinekey配置元素中的decryptionkeyvalidationkey屬性都需要使用相同的值。

name

用於身份驗證的 http cookie 的名稱。注意,如果多個應用程式需要在一台計算機上使用基於窗體的身份驗證服務,並且每個應用程式都希望由應用程式隔離 forms 身份驗證 cookie,則每個應用程式都應配置乙個唯一的 cookie 值。為避免在 url 中產生依賴項,在設定身份驗證 cookie 時,asp.net 還使用「/」作為 path 值,以便將這些 cookie 傳送回站點上的每個應用程式。

path

用於發出的 cookie 的路徑。預設值為「/」,以避免路徑中大小寫不匹配的造成的困難,因為在返回 cookie 時,瀏覽器是嚴格區分大小寫的。共享伺服器環境中的應用程式應使用此指令來維護專用 cookie。(它們還可以使用 api 在執行時指定路徑來發出 cookie。)

protection

用於保護 cookie 資料的方法。有效值如下:

requiressl

如果設定為 true,則 forms 身份驗證會設定 forms 身份驗證 cookie 的安全位。相容的瀏覽器只將 cookie 通過 ssl 連線傳送回 asp.net。注意,如果使用無 cookie forms 身份驗證,則此設定無效。

slidingexpiration

如果設定為 true,則 forms 身份驗證將定期更新 forms 身份驗證票的生存期。無論票證是包含在 cookie 中,還是以無 cookie 的格式包含在 url 中,都會進行此操作。

timeout

時間量(以整數分鐘為單位),經過該時間量之後,cookie 則會過期。預設值是 30。超時屬性是乙個可調值,從收到上次請求的時間開始計算,它將在 n 分鐘後過期。為了避免對效能產生負面影響,也為了避免那些開啟了 cookie 警告的應用程式產生多個瀏覽器警告,cookie 在超時時間過半時更新。(這意味著在某些情況下可能會出現精度損失。)

配置了應用程式後,需要提供乙個登入頁。下面的示例演示乙個簡單的登入頁。該示例在執行時需要 default.aspx 頁。未經身份驗證的請求被重定向到登入頁 (login.aspx),該頁顯示乙個簡單窗體,提示使用者輸入電子郵件位址和密碼。(使用 username="[email protected]" 和 password="password" 作為憑據。)

驗證了憑據後,應用程式呼叫以下內容:

c# vb

formsauthentication.redirectfromloginpage(useremail.value, persistcookie.checked);
formsauthentication.redirectfromloginpage(useremail.value, persistcookie.checked)
這將使用者重定向回最初請求的 url。不想執行重定向的應用程式既可以呼叫formsauthentication.getauthcookie來檢索 cookie 值,也可以呼叫formsauthentication.setauthcookie將正確加密的 cookie 附加到輸出的響應中。對於提供嵌入在包含頁中的登入使用者介面的應用程式,或者想要更多地控制使用者被重定向到的位置的應用程式而言,這些方法很有用。

身份驗證 cookie 既可以是臨時的,也可以是永久(「持久」)的。臨時 cookie 只在當前瀏覽器會話期間保持。當瀏覽器關閉時,cookie 即會丟失。永久 cookie 由瀏覽器儲存,並在瀏覽器各會話期間發回,除非使用者顯式刪除 cookie 或 cookie 的生存期結束。臨時 cookie 和永久 cookie 的 cookie 生存期由timeout配置屬性確定。這一點在行為上與 asp.net 的早期版本相比稍有更改,在早期版本中永久 cookie 的生存期為 50 年。在 asp.net 2.0 中,臨時 cookie 和永久 cookie 的過期日期設定為當前時間加上timeout配置屬性的值。

c# forms-based/cookie authentication

forms 身份驗證所使用的身份驗證 cookie 由system.web.security.formsauthenticationticket類的序列化版本組成。資訊包括使用者名稱(但沒有密碼)、使用的 forms 身份驗證版本、發出 cookie 的日期以及可選的應用程式特定資料的字段。

通過使用formsauthentication.signout方法,應用程式**可以撤消或移除身份驗證 cookie。這將移除身份驗證 cookie,不論它是臨時的還是永久的。

還可以使用配置為基於窗體的身份驗證服務提供有效憑據的列表,如下例所示:

還可以通過使用formsauthentication.hashpasswordforstoringinconfigfile(string password, string passwordformat)api 生成密碼的雜湊表示形式。此方法支援使用 sha1 或 md5 生成雜湊值。然後,應用程式可以呼叫formsauthentication.authenticate並提供使用者名稱和密碼,asp.net 將驗證憑據。根據passwordformat屬性的下列值,憑據可以儲存在明文中,也可以儲存為 sha1 或 md5:

hash 型別

說明 clear

密碼以明文形式儲存

sha1

密碼儲存為 sha1 摘要

md5密碼儲存為 md5 摘要

基於窗體的身份驗證

基於窗體的身份驗證是一項 asp.net 身份驗證服務,它使應用程式能夠提供自己的登入使用者介面並進行自己的憑據驗證。asp.net 對使用者進行身份驗證,將未經身份驗證的使用者重定向到登入頁,並執行所有必要的 cookie 管理。這種身份驗證是許多 使用的流行方法。應用程式必須配置為使用基於窗體的...

Forms基於窗體身份驗證

forms 身份驗證通常指這樣乙個系統,在該系統中使用 http 客戶端重定向將未經身份驗證的請求重定向到 html 窗體。如果應用程式需要在登入時通過 html 窗體收集自己的使用者憑據,那麼選擇 forms 身份驗證就很好。使用者提供憑據並提交該窗體。如果應用程式對請求進行身份驗證,系統會發出乙...

基於token的身份驗證

token相當於是乙個令牌,在使用者登入的時候由伺服器端生成 基於使用者名稱 時間戳 過期時間 發行者等資訊進行簽名 然後發放給客戶端,客戶端將令牌儲存,在以後需要登入驗證的請求中都需要將令牌傳送到伺服器端進行驗證,如果驗證成功,則返回資料。目前很多大型 都在使用基於token的驗證方式 githu...