所谓单点登录(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>

转载于:https://www.cnblogs.com/panlijuan/archive/2011/10/09/2203795.html

不同.net版本实现单点登录相关推荐

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.6 版本 - SSO单点登录接口

    当开发的系统多了.用户多了.合作伙伴多了.对接厂商多了.开发人员多了.部署的服务器也多了,各种安全问题就暴露出来了. 如何安全的把这些系统集成在一起?实现集群的单点登录.严格统一的用户安全体系管理? ...

  2. CAS 5.2.x 实现SSO单点登录教程记录

    CAS SSO 单点登录记录 作者:刘仁奎 个人网址 程序喵:http://www.ibloger.net / http://www.chengxumiao.net QQ:1056856191 Git ...

  3. 【GitLab、Jira、Confluence 单点登录实现】之 CAS 系统部署

    CAS 系统部署 一.CAS 部署可以采用的方式 CAS作为一款成熟的开源SSO系统,应该部署起来非常容易.但实际部署过程中,因为众所周知的网络原因,没少花费时间,最终探索出来一条顺利的渠道. 尝试1 ...

  4. 临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障

    临近年关,咨询师提出360.搜狗急速浏览器无法单点登录到公司核心产品WD: 重定向过多. 现象 经过测试, 出现单点登陆故障的是搜狗.360等双核浏览器(默认使用Chrome内核), 较新式的Edge ...

  5. Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 单点登录简介 创建oauth2-client模块 修改授权服务器配置 网页单点登录演示 调用接口单点登录演示 oauth2-client添加权限校 ...

  6. CAS之5.2x版本之Confluence单点登录-yellowcong

    这一节,主要将如何配置confluence的单点登录,不讲如何安装Confluence,配置cas到Confluence ,有一下几个步骤: 1.配置web.xml文件,设置过滤器,匹配.2.配置se ...

  7. 在ASP.NET 中实现单点登录

    出自:[孟宪会之精彩世界] 发布日期:2005年1月27日 8点48分0秒 [有删改] 由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录.在ASP.NE ...

  8. SpringBoot 整合 Shiro 实现动态权限加载更新+ Session 共享 + 单点登录

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源: juejin.im/post/5d087d60518825 ...

  9. 搭建Jasig CAS中央认证服务实现单点登录——搭建Tomcat并实现SSL安全连接

    预期的工作任务: 实现CAS(CAS采用Jasig CAS)单点登录搭建,开发api以实现java.php..net等单点登录接口:实现数据库.LDAP身份认证对接. (一)平台(Linux和Wind ...

最新文章

  1. Java枚举意义在哪_java – 多个if-else或枚举 – 哪一个更好,为什么?
  2. 清华姚班“斩获”AAAI 2020最佳学生论文:首届弟子贝小辉携手本科在读李子豪,攻坚算法博弈研究...
  3. JS-用js的for循环实现九九乘法表以及其他算数题等
  4. linux内核编译 menuconfig详解,Linux内核编译menuconfig介绍
  5. 重磅!全网最全13010本SCI2020最新影响因子下载!CA+四大神刊!预警期刊最新影响因子一览!
  6. qq动态页面变方格_微信更新“分组显示、群管理”等功能,网友:都是QQ玩剩的姿势...
  7. knx智能照明控制系统电路图_智能照明控制系统应用效果
  8. 伺服驱动器cn1引脚定义_伺服驱动器CN1引脚定义,和面板操作设置,跪求高手指点。说明书弄丢了.脉冲,使能,方向,接第几引脚...
  9. 【xxl-job源码篇01】xxl-job源码解读 神奇的时间轮 触发流程解读
  10. 手机浏览器打开不本地html,手机浏览器打不开网页怎么办
  11. REST-assured简介
  12. 银行卡卡号归属地汇总
  13. Flex Builder中网络监视器导致“访问URL时遇到安全性错误”
  14. RFID 卡片防复制
  15. 单载波频域均衡matlab仿真,包括卷积编码维特比译码,矩阵交织,QPSK调制解调,导频插入,MMSE-FDE频域均衡
  16. 数据分析软件解读王者荣耀一年的“王者”成绩单
  17. 【CrackMe 实战】逆向破解实战之 001 Acid burn.exe
  18. springboot 整合lombok
  19. 运营商宽带网速为什么用bit而不用byte
  20. java登陆界面背景_Java登录界面的实现(注册、登录、背景图片)

热门文章

  1. ICCV 2021 |VisDrone2021 无人机视觉挑战赛启动
  2. 不得不服!腾讯优图联合腾讯会议正式上线神奇的眼神接触功能
  3. 腾讯开源视频动作检测算法DBG,打破两项世界纪录!
  4. 【python教程入门学习】python值得学吗,怎么自学?
  5. 国内几大最让游戏建模师羡慕的企业,你想进去吗?
  6. TensorFlow入门:TensorFlow工作原理
  7. 几个实例让你轻松理解正则表达式
  8. 自动驾驶车辆转向控制(通过支持转角控制的EPS实现角速度控制)
  9. Java日志框架-logback的介绍及配置使用方法(纯Java工程)
  10. android布局中上下对齐,android – 如何使用相对布局垂直对齐列表中的项?