ASP.NET Forms 認證流程

来源:https://www.cnblogs.com/GYY2046/archive/2019/03/09/10500000.html
-Advertisement-
Play Games

ASP.NET Forms 認證 Forms認證基礎 1. HTTP是無狀態的協議,也就是說用戶的每次請求對伺服器來說都是一次全新的請求,伺服器不能識別這個請求是哪個用戶發送的。 2. 那伺服器如何去判斷一個用戶的請求呢? 3. 答案是在每次請求發送時,附帶一些其他的信息來識別用戶的請求 4. 對於 ...


ASP.NET Forms 認證

Forms認證基礎

  1. HTTP是無狀態的協議,也就是說用戶的每次請求對伺服器來說都是一次全新的請求,伺服器不能識別這個請求是哪個用戶發送的。

  2. 那伺服器如何去判斷一個用戶的請求呢?

  3. 答案是在每次請求發送時,附帶一些其他的信息來識別用戶的請求

  4. 對於Forms認證,每次的請求都攜帶同樣的cookie信息,將此信息發送給伺服器,這樣伺服器就可以識別這個請求到底是哪個用戶的。


ASP.NET Forms 認證基礎

  1. ASP.NET Request.IsAuthenticated為true 代表此用戶已經登陸

  2. 使用 HttpContext.User 來表用用戶的信息


ASP.NET Forms 認證過程

  1. ASP.NET 檢查當前的請求,並根據Web.config中配置的認證方式去構造HttpContext.User 供後續處理

  2. 後續可以通過判斷HttpContext.User 信息來識別用戶信息


ASP.NET Forms 登陸與註銷

  1. 使用vs2017 新建一個MVC程式,不進行身份驗證

  2. 在Web.config 的system.web 配置節新增Forms認證信息,內容如下

    <authentication mode="Forms" >
      <forms cookieless="UseCookies" name="FormsCookie" loginUrl="~/Home/Index.cshtml"></forms>
    </authentication>
  1. 我們使用 Request.IsAuthenticated 來判斷用戶是否登陸,我們來做一個登陸頁面
<div>
    <fieldset>
        <legend>用戶登陸</legend>
        <form action="/Home/Login" method="post">
            用戶名:<input type="text" name="loginName" style="width:200px;" />
            密  碼:<input type="password" name="loginPwd" style="width:200px" />
                    <input type="submit" value="登錄" />
        </form>
    </fieldset>
</div>
  1. 後臺驗證密碼成功後跳轉到歡迎的頁面
        public ActionResult Login(string loginName,string loginPwd)
        {
            if (string.IsNullOrEmpty(loginName) || string.IsNullOrEmpty(loginPwd))
                return Redirect("Index");
            if (loginName == "Admin" && loginPwd == "Admin")
            {
                FormsAuthentication.SetAuthCookie(loginName, true);
                return RedirectToAction("Index", "Welcome");
            }
            else
            {
                return Redirect("Index");
            }
        }
  1. 在歡迎頁面如果已登錄顯示用戶名,如果未登錄顯示登錄地址進行登錄
<div>
    <fieldset>
        <legend>
            歡迎
        </legend>
        @if (Request.IsAuthenticated)
        {
            @: 你好 @Context.User.Identity.Name
        }
        else
        {
            <div>
                還未登錄,請進行 <a href="/Home/Index">登錄</a>
            </div>
        }</fieldset>
</div>

總結

可以看到我們在驗證完用戶名和密碼後,只是調用了 FormsAuthentication.SetAuthCookie(loginName, true); 執行完之後ASP.NET 就可以識別此用戶後續的請求。這個方法幫我們做瞭如下流程:
用戶登錄流程

  1. 根據用戶名創建一個FormsAuthenticationTicket對象

  2. 調用FormsAuthenticatin.Encrypt() 進行加密

  3. 根據加密結果創建名稱為 FormsCookie (來自Web.config中的配置) 的cookie

  4. 將此cookie 寫入Response 返回給瀏覽器

  5. 瀏覽器在進行後續請求時會攜帶此cookie到服務端。

每次請求時的認證流程

  1. 瀏覽器在發送請求時攜帶cookie信息

  2. FormsAuthenticationModule 讀取cookie

  3. 從cookie中解析出FormsAuthenticationTicket 對象,過期的對象將被忽略

  4. 根據FormsAuthenticationTicket 對象構造 FormsIdentity對象並設置HttpContext.User

  5. ASP.NET 程式後續 HttpContext.User來判斷用戶信息

到此我們已經完成正整個認證流程。


更多詳細內容請參見大神 Fish Li (李奇峰)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • iTextSharp是一個用於操作PDF文件的組件DLL程式,在C#程式中可以引用iTextSharp組件,用於開發與PDF文件相關的報表等功能,利用iTextSharp組件提供出來的方法介面,我們可以實現很多與PDF文檔有關的操作,如打開PDF文檔對象、往PDF文檔中添加段落、添加圖片鏈接等等,功 ...
  • 在網站建設完成後,很多人都希望統計到網站的訪問情況,如訪問了哪個頁面、頁面停留時間、訪問者的IP地址以及訪問設備、訪問者所在的省份區域、訪問來源等諸多信息,要實現這種功能可以自行編寫代碼,從http請求信息中獲取,也可使用百度統計的功能進行快速開發實現。百度統計是百度推出的一款免費的專業網站流量分析 ...
  • ASP.NET編寫的網站程式,在網站編寫完成所有流程都測試通過後,需要將網站發佈到IIS的Web伺服器上,此文將介紹發佈的流程以及IIS相關設置過程,幫助讀者瞭解網站發佈的流程。 一、首先在Visual Studio中選擇網站項目,然後右鍵中有個發佈。 二、進入發佈界面後,首先設置好相應的配置文件, ...
  • 相關名詞 1. .NET Framework 2. MFC - MircoSoft Foundation Class,微軟基礎類庫 3. COM - Component Object Model,組件對象模型 4. CLR - Common Language Runtime,公共語言運行庫 5. B ...
  • SharpZipLib是一個開源的C#壓縮解壓庫,應用非常廣泛。就像用ADO.NET操作資料庫要打開連接、執行命令、關閉連接等多個步驟一樣,用SharpZipLib進行壓縮和解壓也需要多個步驟。SharpZipLib功能比較強大,在很多C#的應用中,都有它的身影,我們可以通過引入SharpZipLi ...
  • 索引: 目錄索引 一.API 列表 .DeepClone() 用於 Model / Entity / ... ... 等引用類型對象的深度克隆 特性說明 1.不需要對對象做任何特殊處理,直接 .DeepClone() 即可得到該對象的深度克隆 2.不受對象層次深度限制,均可實現深度克隆(下麵會給出幾 ...
  • 目錄 1,前言 2,安裝虛擬串口軟體 3,新建項目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 說明 5,開始使用 flyfire.CustomSerialPort 6,實現把數據寫入串口 7,實現監聽串口消息、多設備進行通訊 8,M ...
  • @[toc] 初識Identity並添加身份驗證管理頁面 前言 在 "使用ASP.NET Core2.2創建WebApp" 這篇教程中,我們使用 命令創建了一個沒有身份驗證管理的WebApp,通常情況下是無法滿足我們對敏感頁面控制的要求,典型的安全使用場景就是後臺管理。 在這一篇中,我們將通過命令嘗 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...