内容简介:我遇到的情境是這樣的:某歷史悠久的網站由新舊程式組成,早期開發是用 WebForm,後期擴充功能時另開了 MVC 專案,所以站台上有兩個 Web Application,一個是 Web Site,一個是 MVC。 架構潔癖者看到這裡可能就怒了,把系統搞成這樣是要怎麼維護? 是不會繼續用 WebForm 寫或乾脆全翻成 MVC 嗎? 唉,繼續用 WebForm 寫新功能會傷心,用 MVC 全部翻新系統會傷肝,還可能危害心血管跟飯碗(想想最近新聞上花一百億砍掉重練的故事...),當痛苦指數仍在可承受範圍內,海納
我遇到的情境是這樣的:某歷史悠久的網站由新舊程式組成,早期開發是用 WebForm,後期擴充功能時另開了 MVC 專案,所以站台上有兩個 Web Application,一個是 Web Site,一個是 MVC。 架構潔癖者看到這裡可能就怒了,把系統搞成這樣是要怎麼維護? 是不會繼續用 WebForm 寫或乾脆全翻成 MVC 嗎? 唉,繼續用 WebForm 寫新功能會傷心,用 MVC 全部翻新系統會傷肝,還可能危害心血管跟飯碗(想想最近新聞上花一百億砍掉重練的故事...),當痛苦指數仍在可承受範圍內,海納百川是上策呀~
近期接到需求,系統要從 Windows 整合式驗證改為 Form 驗證,憑著第一時間直覺,我捲起袖子自幹了一套簡易版 Single Sign On 身分同步機制,搞到滿頭大汗,但也成功讓 MVC 用 WebForm 的 Form 驗證登入身分。
早上跑步,跑著跑著忽然想到一件事:同一個站台多個 Web Application 的 Cookie 原本就可共享, 而 Form 驗證靠的是 .ASPXAUTH Cookie 配合 Machine Key 加密。因此只要確保 WebForm 與 MVC 的 Form 驗證 Cookie 能互通,就可以做到 Web Form 登入寫入 .ASPXAUTH Cookie, 連上 MVC 時,MVC 解密 .ASPXAUTH Cookie 取出登入身分,即可實現 Web Form 與 MVC 共用登入,根本不需要自己搞 SSO。
跑完步迫不及查資料加寫測試程式,嘿嘿嘿,還真的讓我做出來了!
先整理一些背景知識:
測試環境如下,IIS 站台有兩個網站專案,FormAuthWebForm 及 FormAuthMvc 分別為 Web Site Project 及 ASP.NET MVC。我將登入頁面放在 WebForm Login.aspx:
Login.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <h3>WebForm</h3> <form id="form1" runat="server"> <div> Account: <asp:TextBox runat="server" id="txtUserId" text="Jeffrey"></asp:TextBox> </div> <div> Password: <asp:TextBox runat="server" ID="txtPasswd" TextMode="Password"></asp:TextBox> </div> <asp:Button runat="server" id="btnLogin" OnClick="btnLogin_OnClick" text="Login"/> </form> </body> </html>
Login.aspx.cs
using System; using System.Web.Security; public partial class Login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnLogin_OnClick(object sender, EventArgs e) { var userId = txtUserId.Text; var passwd = txtPasswd.Text; //展示用途,省略密碼驗證,直接登入 FormsAuthentication.RedirectFromLoginPage(userId, false); } }
AutoFormWebForm/web.config 要設成 Form 驗證。但有幾個注意事項:
- MVC 的 httpRuntime 使用 4.5.2,實測 WebForm 也要配合設成
<httpRuntime targetFramework="4.5.2" />
才會通。 參考 - MVC 與 WebForm 必須使用相同 Machine Key,.ASPXAUTH Cookie 才能同時被兩邊解密驗證,故 Machine Key 不能自動產生,要在 web.config 加上
<machineKey ...>
指定。IIS 管理員有產生 Machine Key 的工具。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.web> <compilation debug="false" targetFramework="4.5.2" /> <httpRuntime targetFramework="4.5.2" /> <authentication mode="Forms"> <forms loginUrl="Login.aspx" /> </authentication> <machineKey decryption="AES" decryptionKey="4134...省略..." validation="SHA1" validationKey="D1DD...省略..." /> <authorization> <deny users="?" /> </authorization> <pages controlRenderingCompatibilityVersion="4.0" /> </system.web> </configuration>
MVC 端也要修改 web.config。首先 machineKey 要跟 WebForm 網站一致,forms loginUrl 指向 /FormAuthWebForm/Login.aspx,defaultUrl 則指向自己的 Home/Index。
<system.web> <compilation debug="true" targetFramework="4.5.2"/> <httpRuntime targetFramework="4.5.2"/> <authentication mode="Forms"> <forms loginUrl="/FormAuthWebForm/Login.aspx" defaultUrl="~/Home/Index"></forms> </authentication> <<machineKey decryption="AES" decryptionKey="4134...省略..." validation="SHA1" validationKey="D1DD...省略..." /> <authorization> <deny users="?"/> </authorization> </system.web>
在 Index.cshtml 加入一段程式驗證 MVC 端是否能抓到 WebForm 登入使用者名稱:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> <h3>MVC</h3> Login User = @User.Identity.Name </div> </body> </html>
實測結果:
掌握這個原則,意味著只要我們能確保 Cookie 可被讀取外加 Machine Key 一致,就能在多個 ASP.NET Web Application 間(不管是 MVC 還是 WebForm,即使在不同站台也可能,只要 Cookie 能互通)共享 Form 驗證登入身分。酷~
Tutorial of how to setup to make ASP.NET WebFrom web site and MVC.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Processing语言权威指南
Casey Reas、Ben Fry / 张静 / 电子工业出版社 / 2013-10-1 / 139.00
本书介绍了可视化艺术中的计算机编程概念,对开源编程语言Processing作了非常详尽的阐述。学生、艺术家、设计师、建筑师、研究者,以及任何想编程实现绘画、动画和互动的人都可以使用它。书中的大部分章节是短小的单元,介绍Processing的语法和基本概念(变量、函数、面向对象编程),涵盖与软件相关的图像处理、绘制,并且给出了大量简短的原型程序,配以相应的过程图像与注释。书中还有一些访谈文章,与动画......一起来看看 《Processing语言权威指南》 这本书的介绍吧!
XML 在线格式化
在线 XML 格式化压缩工具
RGB HSV 转换
RGB HSV 互转工具