本機環境多個.Net core專案單點登入的實現方案: cookie跨域 + 使用虛擬域名代替localhost訪問站點
場景 |
本機環境使用Visual studio獨立開發兩個專案,需要單點登入,
第一個vs專案的啟動地址為 localhost:15900,
第二個vs專案的啟動地址為 localhost:55888,
現在的需求,當用戶在第一個專案登入之後,跳轉到第二個專案,第二個專案不需要再次登入就可以獲取到第一個專案登入的使用者資訊,
或者當用戶在第二個專案登入之後,跳轉到第一個專案,第一個專案也不需要再次登入就可以獲取到第二個專案的登入使用者資訊,
多個專案之間共享登入資訊,需要使用cookie跨域,而cookie跨域的條件要滿足同源策略,即相同的域名 + 相同的埠,
而localhost:15900與localhost:55888兩個域名,只滿足域名相同,埠卻不同,所以不滿足cookie跨域條件,
那麼,在本機環境如何實現相同的域名 + 相同的埠呢,方案是使用虛擬域名。
同源策略解決方案 |
使用同源策略的解決方案有兩種:
【1】第一種方案是使用nginx做反向代理,將兩個專案部署在本機,並用相同埠:
在nginx中配置同一個埠(比如80埠),監聽多個不同的三級域名將HTTP請求轉發到localhost:15900及localhost:55888兩個站點,比如將local-crm.021sports.com:80轉發到localhost:15900,將local-mall.021sports.com:80轉發到localhost:55888,
這種方案的優點是可以把兩個專案同時部署在本機,方便在本機debug除錯,缺點是配置nginx稍微複雜一點,
這種方案的配置請參考windows下安裝nginx並配置埠轉發 + 負載均衡,使用80埠轉發多個本機的虛擬域名
【2】第二種方案是將localhost:15900與localhost:55888其中一個部署在其它伺服器,另一個部署在本機,並使用同一埠:
為什麼要用兩臺伺服器部署兩個專案呢,因為同一臺伺服器不能同時使用同一個埠執行兩個應用程式,所以兩個visual studio專案不能共用同一個埠。
這種方案的優點是不需要配置反向代理,搭建環境很簡單,缺點是不能兩個專案同時debug除錯,只有執行在本機的visual studio專案可以debug除錯。
本篇詳細寫第【2】種解決方案的實現。
配置內網及本機虛擬域名 |
打算將localhost:15900這個專案部署在內網的 10.10.61.169伺服器上,域名為 dev-crm.021sports.com,
將localhost:55888這個專案用本機的visual studio執行,域名為 local-mall.021sports.com,
但是vs啟動的專案預設url地址為 localhost:55888,為了共享cookie,需要將vs的啟動url改成local-mall.021sports.com,這樣才能跟10.10.61.169伺服器上的dev-crm.021sports.com共享二級域名 021sports.com,
那麼,如何在本機既能訪問dev-crm.021sports.com、又能訪問local-mall.021sports.com兩個域名呢,答案是,配置兩臺伺服器的hosts檔案,新增虛擬域名。
【1】配置10.10.61.169的hosts檔案
遠端桌面到10.10.61.169伺服器,用文字編輯器開啟C:\Windows\System32\drivers\etc\hosts
新增 127.0.0.1 dev-crm.021sports.com
如果有多個域名,就新增多條,每個域名寫一行。
然後在10.10.61.169伺服器的IIS裡配置站點主機名。
【2】配置本機的hosts
切換到本機,用文字編輯器開啟C:\Windows\System32\drivers\etc\hosts,新增
127.0.0.1 local-crm.021sports.com 10.10.61.169 dev-crm.021sports.com
將 local-mall.021sports.com 路由到本機,
將 dev-crm.021sports.com 路由到10.10.61.169伺服器,
配置完成後,本機就可以同時訪問 local-mall.021sports.com 及dev-crm.021sports.com 兩個域名了。
配置本機visual studio用域名啟動專案 |
預設情況下,visual studio用 localhost:55888 這種url啟動專案,不能跟dev-crm.021sports.com共享cookie,為了讓本機vs啟動的專案可以共享 二級域名 021sports.com 下的cookie,需要將vs的啟動url地址改成自定義域名 xxx.021sports.com,
由於10.10.61.169上的專案使用的域名是dev-crm.021sports.com,埠為80,所以本機的vs專案啟動url也需要用80埠,因為相同二級域名 + 相同端口才能使不同站點共享cookie。
可以不用80埠,用其它埠也行,只要兩個專案使用同一個埠就行。
【1】修改.net或.net core根目錄下的.vs\專案名稱\config\applicationhost.config 檔案,新增兩個host繫結,
開啟applicationhost.config ,找到 sites > site > bindings > binding 節點,新增binding節點
預設繫結的host只有 *:55888:localhost,現在多加兩個binding節點:
*:80:localhost
*:80:127.0.0.1
*:80:local-mall.021sports.com
改成80埠的前提是80埠沒有被其它應用程式使用,如果已被使用,只能用其它埠哦,
修改完成之後的效果:
【2】修改vs的啟動url
在.net或.net core的mvc或webapi專案上【右鍵 > 屬性 】開啟屬性配置視窗,將【呼叫 > 應用URL】改成域名 local-mall.021sports.com
然後用管理員許可權啟動visual studio,注意,一定要要用管理員許可權啟動visual studio。
到此,配置完成,現在可以用域名 local-mall.021sports.com 訪問本機的專案了。