首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

跨應用程序 Forms 身份驗證完整實現指南(含 machineKey 配置)

     編輯:關於ASP.NET

ASP.NET 支援跨多個應用程序(甚至跨服務器場)共享 Forms 認證票據。本文以雙站點實戰為例,詳細講解 web.config 關鍵配置、machineKey 生成與常見坑點。

一、場景描述

  • 站點 A:https://localhost/test/(受保護資源)
  • 站點 B:https://localhost:81/(含登錄頁 Login.aspx)
  • 兩站點處於不同端口/域名,需共享認證 Cookie。

二、核心配置(兩站點完全一致)

<authentication mode="Forms">
  <forms loginUrl="https://localhost:81/Login.aspx"
         path="/"
         protection="All"
         defaultUrl="https://localhost:81/Default.aspx"
         timeout="40"
         name=".DeESoft" />
</authentication>
<machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
            decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
            validation="SHA1" />
<authorization>
  <deny users="?" />
</authorization>

三、關鍵點解析

  1. name:Cookie 名稱必須相同(建議以點開頭實現跨子域共享)。
  2. path:設為 "/" 確保全站點可讀。
  3. machineKey:必須手動固定 validationKey/decryptionKey/validation,否則應用程序池回收導致金鑰變更,舊票據解密失效。
  4. protection="All":同時簽名與加密,最高安全級別。
  5. domain(可選):跨二級域名時顯式設定 domain=".example.com"。

四、machineKey 生成工具

推薦使用 ASP.NET Machine Key Generator 生成符合規範的金鑰,避免手工輸入錯誤。

五、常見問題排查

  • 登錄後跳轉失敗:檢查 defaultUrl 與 loginUrl 是否可訪問。
  • 站點 A 無法識別用戶:確認兩站點 machineKey 完全一致、應用程序池未回收。
  • Cookie 不傳遞:瀏覽器開發者工具檢查 Cookie 域/路徑/安全標記。

六、總結

跨應用 Forms 認證的核心在於「同名 Cookie + 同金鑰 + 同保護級別」。生產環境務必將 machineKey 寫入配置文件,並透過負載均衡器 Session Affinity 或共享 Session State 進一步保障穩定性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved