一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - 如何在不同.net版本實現單點登錄

如何在不同.net版本實現單點登錄

2019-11-13 11:32asp.net教程網 ASP.NET教程

經過研究,重寫實現了一個可以在不同.net版本中實現單點登錄的簡單方法。現在和大家分享一下,不足之處還望見諒

所謂單點登錄(Single Sign On就是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。其實對于程序員在技術上要實現就得就是多個不同域名間共享cookie的問題。

最近在為ERP添加一個部署在另一臺機器上,鏈接到原有老系統中的子項目,調用原有老項目中的Login實現單點登錄,嘗試了N次屢試不成,最后確定問題,是,.net2.0與4.0中對cookie的加密/解密方法由此差異,于是經過研究,重寫實現了一個可以在不同.net版本中實現單點登錄的簡單方法。

1,共用登陸頁代碼實現:

復制代碼代碼如下:

protected void btnLogin_Click(object sender, EventArgs e)
{
  //認證開票,跳轉到原始請求頁面
   System.Web.Security.FormsAuthentication.RedirectFromLoginPage("ejiyuan", false);
}


2,配置文件: 

復制代碼代碼如下:

<!--訪問權限控制-->
<authorization>
    <deny users="?"/>
</authorization>    
<!--身份認證方式-->
<authentication mode="Forms">
    <forms name=".ASPNET" protection="All" enableCrossAppRedirects="true" loginUrl="Login.aspx" timeout="2880" path="/" domain=".local.com"/>
</authentication>   
<!--驗證算法-->
<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902" decryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC" validation="SHA1" decryption="3DES" /> <compilation debug="true"/>


這里:authentication/forms節點最重要的兩個屬性是name和protection. 所有實現單點登錄的項目都要是相同的配置就這樣,才可以在不同程序中同樣的保護級別下讀寫Cookie
當 protection屬性設置為 "All",通過Hash值進行加密和驗證數據都存放在Cookie中.默認的驗證和加密使用的Key都存儲在machine.config文件,我們可以在應用程序的Web.Config文件覆蓋這些值.默認值如下:

 

<machineKeyvalidationKey="AutoGenerate,IsolateApps"decryptionKey=" AutoGenerate,IsolateApps"validation="SHA1" />

IsolateApps表示為每個應用程序生成不同的Key.我們不能使用這個.為了能在多個應用程序中使用相同的Key來加密解密cookie,我們可以移除IsolateApps 選項或者更好的方法是在所有需要實現SSO的應用程序的Web.Config中設置一個具體的Key值:

<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902" decryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC" validation="SHA1" decryption="3DES" /> <compilation debug="true"/>

如果你使用同樣的存儲方式,實現SSO只是改動一下Web.config而已,必須保證單點中的每個應用程序都有相同的配置,如果單點登錄的應用程序是跨不同.net版本的,這里的加密/解密不要使用md5

<machineKey decryptionKey="8B6697227CBCA902B1A0925D00FAA00B353F2DF4359D2099" validation="MD5" validationKey="282487E295028E59B8F411ACB689CCD6F39DDD2146055A3EE480424315994760ADF21B580D8587DB675FA02F7916813044E25309CCCDB647174D5B3D0DD9141"/>

3,沒有登錄頁的單點登錄不需要代碼 直接配置就可以了,配置如下

復制代碼代碼如下:

<authorization>
  <deny users="?"/>
</authorization>
<authentication mode="Forms">
    <forms name=".ASPNET" protection="All" enableCrossAppRedirects="true" loginUrl="http://Sso2.local.com/Login.aspx" timeout="2880" path="/" domain=".local.com"/>
</authentication>


4,登錄模塊從定向代碼封裝在httpModules中供其他系統直接調用,這里附上封裝代碼與引用方法: 

復制代碼代碼如下:


public class SsoLoginRedirectModule : IHttpModule
{
    public void Init(HttpApplication i_application)
    {
        // TODO:  Add UploadModule.Init implementation    
        i_application.EndRequest += new EventHandler(i_application_EndRequest);
    }

 

    void i_application_EndRequest(object sender, EventArgs e)
    {
        if ((HttpContext.Current.Response.StatusCode == 302) && HttpContext.Current.Response.RedirectLocation.Contains(FormsAuthentication.LoginUrl))
        {
            HttpContext.Current.Response.RedirectLocation = FormsAuthentication.LoginUrl + "?ReturnUrl=" + HttpUtility.UrlEncode(HttpContext.Current.Request.Url.OriginalString);
        }
    }

    public void Dispose()
    {
        //throw new NotImplementedException();
    }
}


引用: 

復制代碼代碼如下:

<httpModules>
    <add name="SsoModule" type="SsoModule.SsoLoginRedirectModule, SsoModule"/>
</httpModules>
 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 大奶妈咪女教师 | 男女视频在线观看网站 | 4虎影院在线观看 | 特级一级全黄毛片免费 | 91精品手机国产露脸 | 亚洲情射| 无码专区aaaaaa免费视频 | 青青青国产在线 | 高清女主播一区二区三区 | 34g污奶跳舞| 蘑菇香蕉茄子绿巨人丝瓜草莓 | 人禽l交免费视频观看+视频 | 国产成人精品一区二三区在线观看 | lubuntu网页版在线 | 免费在线视频网站 | 国产精品最新 | 欧美亚洲国产另类在线观看 | 国产成人综合精品一区 | 国产一区二区三区日韩 | 国产成人h综合亚洲欧美在线 | 四虎影在线永久免费观看 | 日韩一区二区中文字幕 | 免费看片黄色 | 成人榴莲视频 | 精品无人区一区二区三区 | 久久精品成人免费网站 | 激情影院网站 | 国产在线xvideos | 国产亚洲精品aaa大片 | 性满足久久久久久久久 | 日本红色高清免费观看 | 成人一区二区丝袜美腿 | 美女和男人差差 | 大陆国产vs国产对白 | 欧美日韩一区二区三区免费 | 亚洲国产精品成人久久 | 亚洲毛片基地4455ww | 日韩欧美一区二区三区免费观看 | 99久久精品免费观看区一 | 亚洲AV无码乱码在线观看浪潮 | 国产欧美精品一区二区三区–老狼 |