主站和虛擬目錄之間的Forms身份驗證
最近專案中將一個網站的專案拆開,根據功能不同簡歷不同的專案。但是最後要在一個網站域名下。這就用到了虛擬目錄。
同時遇到了一個困擾了我一天的問題,雖然最後不算是什麼大問題,但是卻把cookies和Forms身份驗證的原理又重新研究了一番。還是基礎,在此記錄。
要求:登入主站之後,分站不用登入,直接進入。即單點登入。
背景:iis7中建立主站,主站中有分站的應用程式(即虛擬目錄)。
使用標準的asp.net FormsAuthentication身份驗證方式。登入程式碼如下:
RMS_LoginName rln = obj.ResultsObject as RMS_LoginName;
FormsAuthentication.SetAuthCookie(rln.Login_ID.ToString(),false);
HttpCookie cookie = FormsAuthentication.GetAuthCookie(rln.Login_ID.ToString(), false);
FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(cookie.Value);
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(1, oldTicket.Name, oldTicket.IssueDate, DateTime.Now.AddMinutes(30), oldTicket.IsPersistent, rln.ToString(), FormsAuthentication.FormsCookiePath);
cookie.Domain = cookie.Domain;
cookie.Path = "/";
cookie.Expires = DateTime.Now.AddMinutes(30);
cookie.Value = FormsAuthentication.Encrypt(newTicket);
HttpContext.Current.Response.Cookies.Add(cookie);
主站和分站兩個應用程式web.config 配置相同
<authentication mode="Forms" >
<!--以下登入地址根據登入框頁面真實地址修改-->
<forms loginUrl="/login.html" name="CotMainCenter" timeout="1800" defaultUrl ="/index.html" domain=".cotlife.cn" enableCrossAppRedirects="false" cookieless="UseDeviceProfile" />
</authentication>
問題來了:主站登入之後,分站無論如何不是登入狀態。Context.User.Identity.IsAuthenticated始終未false
第一步:設定相同的domain,不好使。查詢各種網上的資料,均不得要領。
第二步:除錯分站PostAuthenticateRequest事件,中發現。Cookie丟失。
第三步:對比主站Request請求和奮戰
第四步:使用瀏覽器除錯,發現headers中Cookie包含登入的CotMainCenter。但是為啥沒解析出來呢。
第五步:除錯分站BeginRequest事件,中發現Cookie是有CotMainCenter的。
第六步:懷疑是分站解析Cookie時沒解析成功。 那麼為啥相同的Cookie在主站可以解析,分站不可以解析呢?有可能是不同的應用程式解析方式不一樣?
在web.config中加入
<machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" />
問題解決。
總結:不同的應用程式,在解析cookie時需要有相同的machinekey。當然machinekey需要自己生成。
但是為啥我的是同一個機器,machineKey會不一樣呢?這個一開始就沒考慮。現在還是有點糊塗。期待高手給解答一下。
相關推薦
主站和虛擬目錄之間的Forms身份驗證
最近專案中將一個網站的專案拆開,根據功能不同簡歷不同的專案。但是最後要在一個網站域名下。這就用到了虛擬目錄。 同時遇到了一個困擾了我一天的問題,雖然最後不算是什麼大問題,但是卻把cookies和Forms身份驗證的原理又重新研究了一番。還是基礎,在此記錄。 要求:登入主站之
在KVM主機和虛擬機之間共享目錄
kvm執行以下步驟: (1)在host OS上面創建新的目錄和在這個目錄裏面創建一個文件。 root@kvm:~# mkdir /tmp/shared root@kvm:~# touch /tmp/shared/file (2)在停止KVM的實例後,添加下面的配置 root@kvm:~# virsh edit
在Docker Toolbox 終端中使用 vboxmanage.exe 程式在宿主機和虛擬機器之間建立共享目錄
在Docker Toolbox 終端中使用 vboxmanage.exe 程式在宿主機和虛擬機器之間建立共享目錄 用途說明: Docker Toolbox軟體包中,包括Oracle Virtualbox虛擬化軟體,其中包括命令列工具vboxmanage.exe程式,可以實
ajax主域和子域之間的跨域問題
復制 jquery對象 body content iframe .com post {} log 【轉發】http://www.cnblogs.com/adtxgc/p/4691872.html iframe解決ajax主域和子域之間的跨域問題 在某些應用場景下,需
VirtualBox實現宿主機和虛擬機之間網絡的通訊
popu cto 通信 res data rest data- 虛擬網絡 bsp 摘要:實現宿主機和虛擬機之間網絡的通訊 環境: 宿主機操作系統 WindowsXP 虛擬機軟件 VirtualBox 虛
VirtualBox解決主機和虛擬機之間ping不通
href 設置 sdn virt internet host-only 之間 ping通 虛擬機 VirtualBox在開啟虛擬機的時候開啟兩個網卡,分別為Host-only模式和橋接模式,註意主機的防火墻一定要關閉,否則虛擬機ping不通。 此時: 1.虛擬機能ping通
virtualbox centos6.7 主機和虛擬機器之間通訊設定
一:環境軟體準備: 1、下載Oracle virtual box,進行安裝。Install VirtualBox from: https://www.virtualbox.org/wiki/Downloads 2、從http://mirrors.163.co
window系統下 Apache配置虛擬主機和虛擬目錄的方法
Apache配置虛擬主機 1.方式一:使用不同的服務埠,啟動多個apache服務例項,使用各自的配置檔案 1)配置檔案中新增監聽的埠 Listen801 Listen802 2) <VirtualHost*:801> [email&
VMWare Tools安裝——實現主機和虛擬機器之間的文字和檔案的直接複製貼上
前一階段安裝虛擬機器後,複製貼上是在麻煩,所以上網查找了一下方法。查詢到的文章 根據這篇文章進行下記錄。 在選單中點選虛擬機器,然後點選安裝(或者重新安裝) VMWare Tools 在虛擬機器中開啟光碟,裡邊會有VMware Tool的相關檔案,然後
vim和虛擬終端之間的複製貼上
以前一直不知道如何將vim檔案中的內容,比如某命令列,複製到linux的Terminal下執行。因為在.vimrc裡有set mouse=a,所以vim的編輯游標跟隨滑鼠,這樣就不能用滑鼠右鍵進行復制了。可以通過按住shift鍵,然後用滑鼠左鍵選擇需要複製的內容,這
邏輯地址、線性地址、實體地址和虛擬地址之間的關係
本貼涉及的硬體平臺是X86,如果是其它平臺,嘻嘻,不保證能一一對號入座,但是舉一反三,我想是完全可行的。一、概念實體地址(physical address)用於記憶體晶片級的單元定址,與處理器和CPU連線的地址匯流排相對應。——這個概念應該是這幾個概念中最好理解的一個,但是值
VirtualBox 更改主機和虛擬機器之間的滑鼠切換熱鍵
VirtualBox 主機和虛擬機器之間的滑鼠切換熱鍵 是 Right Ctrl , 一般用慣VM Ware的都不太習慣,那麼怎麼改變VirtualBox滑鼠切換熱鍵呢? 1、點選選單欄的 管理》全域性設定 2、點選右側選單 熱鍵》虛擬電腦 進行熱鍵修改
利用tftp協議在Windows10和虛擬機器之間傳送檔案
開發十年,就只剩下這套架構體系了! >>>
asp.net的forms身份驗證 單用戶身份驗證
for dir rom conf orm author 驗證 name edi asp.net的forms身份驗證 單用戶身份驗證 首先要配置Web.config文件 <system.web> <authentication mode="For
ASP.NET Core與Dapper和VS 2017使用JWT身份驗證WEB API並在Angular2客戶端應用程式中使用它
目錄 介紹 背景 步驟1 建立ASP.NET Core Web API專案 Fitness.JWT.API專案說明 使用程式碼 startup.cs JwtIssuerOptions.cs JwtController.cs identity.FindFir
IIS 訪問需要使用者名稱和密碼 (需要進行身份驗證)
(1)故障描述:在IIS下發布了某個站點某些頁面檔案,我們姑且設定為1.htm,通過IIS裡面的瀏覽功能檢視頁面能夠順利訪問裡面的內容。同時我們從訪問地址處看到資訊為http://localhost/1.htm。(如圖1) 接下來在其他計算機或更改本機訪問地址為自身
asp.net Forms 身份驗證 html頁面
IIS 中預設是不支援靜態頁面進行Forms驗證,在網上找個了好多答案,配置都太過繁瑣 想讓IIS的Forms驗證 支援HTML靜態頁面其實只需要在web.config下進行簡單的配置就可以了 1、在 system.web節點 配置 Forms驗證 <sys
SSL雙向認證以及證書的製作和使用-https+客戶端身份驗證
客戶端認證伺服器: 正規的做法是:到國際知名的證書頒發機構,如VeriSign申請一本伺服器證書,比如支付寶的首頁,點選小鎖的圖示,可以看到支付寶是通過VeriSign認證頒發的伺服器證書: 我們用的操作系統(windows, linux, unix ,android, ios等)都預置了很多信任的根證
Apache配置虛擬目錄和多主機頭
本文轉載自:http://www.cnblogs.com/lzrabbit/archive/2013/03/05/2944804.html 多個虛擬目錄 首先把Apache安裝到D:\Program Files\Apache2.2目錄下,埠號設定為8080,安裝完
Nginx 虛擬目錄和虛擬主機的配置
conf code get 負載 study blank table 雙引號 無法 nginx.conf 配置文件的幾個常用命令 nginx 配置文件主要分為六個區域: main: 全局設置 events: nginx工作模式 http: http設置 se