asp.net form身份认证不定时认证失败的问题 排查
1.網站出現form認證不定時認證失敗。登陸過后 每隔一會兒就需要重新登陸。首先檢查的是form身份認證票據設置的時間(正常) 然后檢查加密后的身份認證信息寫入的cookie的失效時間(正常)
2.這個時候的想法是服務器是否加了一層代理。導致代理向服務器發送身份認證cookie信息失敗,或者是服務器返回身份認證信息cookie ?經過代理轉發給客戶端的時候代理經過包裝。第二次發向代理 代理認為失效了 不向上層轉發(host內網 排除)
3.在asp.net 事件管道的begin_resquest ?打印requset 封裝的cookie信息(存在) ?在身份認證信息事件管道(第二個事件管道)打印(無效)
4.這個時候發現是asp.net框架對身份認證cookie認證失敗。。(票據有效時間過了 排除)
5.了解身份認證原理
? ? 登陸時:
? ? ? ? ?1. 檢查用戶提交的登錄名和密碼是否正確。
? ? ? ? ?2. 根據登錄名創建一個FormsAuthenticationTicket對象。
? ? ? ? ?3. 調用FormsAuthentication.Encrypt()加密。(每次程序啟動都會隨機生成一個加密字符串。根據這個加密字符串加密和解密)
? ? ? ? ?4. 根據加密結果創建登錄Cookie,并寫入Response。
? ? 每次身份認證:
? ? ? ? ?1. FormsAuthenticationModule嘗試讀取登錄Cookie。
? ? ? ? ?2. 從Cookie中解析出FormsAuthenticationTicket對象。過期的對象將被忽略。(解析是通過 登錄時的加密字符串進行解析)
? ? ? ? ?3. 根據FormsAuthenticationTicket對象構造FormsIdentity對象并設置HttpContext.User
? ? ? ? ?4. UrlAuthorizationModule執行授權檢查。
6.發現iis的web程序 ?處理的進程數改成了5個進程
? ?分析:進程之間數據是不能共享的。那么每個進程生成的隨機加密字符串都不一樣。假如有進程a 和b2個進程 登陸是進程a處理 ,其他請求是進程b處理 通過b的加密字符串解析a的加密字符串加密的身份認證信息(失敗) 導致登陸失敗
? ? ? ? ? ?解決 配置web的加密字符串 不使用隨機
轉載于:https://www.cnblogs.com/LQBlog/p/5907989.html
總結
以上是生活随笔為你收集整理的asp.net form身份认证不定时认证失败的问题 排查的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NDK Caused by: java
- 下一篇: zabbix报错gd、freetype、