1. 程式人生 > >主站和虛擬目錄之間的Forms身份驗證

主站和虛擬目錄之間的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與DapperVS 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