最近在做一个无敌长的项目,从五一休假做到十一休假!有一个需求就是要求单点登陆(SSO)


解决思路如下:

请求认证的网站 :用一个HttpModule 截取所有请求,判断HttpContext.User是不是Null,如为空,判断Url上是不是有签名过的认证信息, 如果有,判断签名信息是否有效,如果有效,将认证信息写入Cookie中.认证完成

认证的网站: 如果登陆页Url中有要求认证的网址,判断用户是不是已授权,如果已授权,将用户信息签名,写入Url中

二个网站都使用的Form认证

代码
请求认证网站,HttpMoudle如下

  1关于单点认证的一个简单实现(结合Form认证)!using System;
  2关于单点认证的一个简单实现(结合Form认证)!using System.Collections.Generic;
  3关于单点认证的一个简单实现(结合Form认证)!using System.Text;
  4关于单点认证的一个简单实现(结合Form认证)!using System.Web;
  5关于单点认证的一个简单实现(结合Form认证)!using System.Web.Security;
  6关于单点认证的一个简单实现(结合Form认证)!using System.Security.Principal;
  7关于单点认证的一个简单实现(结合Form认证)!
  8关于单点认证的一个简单实现(结合Form认证)!namespace SSO
  9


SSOClient 是一个助手类主要负责认证签名,设置Cookie,从Url中分离出认证信息
 1关于单点认证的一个简单实现(结合Form认证)!using System;
 2关于单点认证的一个简单实现(结合Form认证)!using System.Collections.Generic;
 3关于单点认证的一个简单实现(结合Form认证)!using System.Text;
 4关于单点认证的一个简单实现(结合Form认证)!using System.Security.Cryptography;
 5关于单点认证的一个简单实现(结合Form认证)!using System.Security.Principal;
 6关于单点认证的一个简单实现(结合Form认证)!using System.Web;
 7关于单点认证的一个简单实现(结合Form认证)!using System.Web.Security;
 8关于单点认证的一个简单实现(结合Form认证)!
 9关于单点认证的一个简单实现(结合Form认证)!
10关于单点认证的一个简单实现(结合Form认证)!namespace SSO
11

被认证的网站的WebConfig文件
关于单点认证的一个简单实现(结合Form认证)!<?xml version="1.0"?>
关于单点认证的一个简单实现(结合Form认证)!
<!-- 
关于单点认证的一个简单实现(结合Form认证)!    注意: 除了手动编辑此文件以外,您还可以使用 
关于单点认证的一个简单实现(结合Form认证)!    Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
关于单点认证的一个简单实现(结合Form认证)!     “网站”->“Asp.Net 配置”选项。
关于单点认证的一个简单实现(结合Form认证)!    设置和注释的完整列表在 
关于单点认证的一个简单实现(结合Form认证)!    machine.config.comments 中,该文件通常位于 
关于单点认证的一个简单实现(结合Form认证)!    \Windows\Microsoft.Net\Framework\v2.x\Config 中
关于单点认证的一个简单实现(结合Form认证)!
-->
关于单点认证的一个简单实现(结合Form认证)!
<configuration>
关于单点认证的一个简单实现(结合Form认证)!    
<appSettings/>
关于单点认证的一个简单实现(结合Form认证)!    
<connectionStrings/>
关于单点认证的一个简单实现(结合Form认证)!    
<system.web>
关于单点认证的一个简单实现(结合Form认证)!        
<!-- 
关于单点认证的一个简单实现(结合Form认证)!            设置 compilation debug="true" 将调试符号插入
关于单点认证的一个简单实现(结合Form认证)!            已编译的页面中。但由于这会 
关于单点认证的一个简单实现(结合Form认证)!            影响性能,因此只在开发过程中将此值 
关于单点认证的一个简单实现(结合Form认证)!            设置为 true。
关于单点认证的一个简单实现(结合Form认证)!        
-->
关于单点认证的一个简单实现(结合Form认证)!        
<compilation debug="true">
关于单点认证的一个简单实现(结合Form认证)!            
<assemblies>
关于单点认证的一个简单实现(结合Form认证)!                
<add assembly="System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation>
关于单点认证的一个简单实现(结合Form认证)!        
<!--
关于单点认证的一个简单实现(结合Form认证)!            通过 <authentication> 节可以配置 ASP.NET 使用的 
关于单点认证的一个简单实现(结合Form认证)!            安全身份验证模式,
关于单点认证的一个简单实现(结合Form认证)!            以标识传入的用户。 
关于单点认证的一个简单实现(结合Form认证)!        
-->
关于单点认证的一个简单实现(结合Form认证)!    
<authentication mode="Forms">
关于单点认证的一个简单实现(结合Form认证)!      
<forms loginUrl="http://localhost/TestSSOServer/Default.aspx" name=".ASPXFORMSAUTH" protection="All" path="/" timeout="30" enableCrossAppRedirects="true"/>
关于单点认证的一个简单实现(结合Form认证)!    
</authentication>
关于单点认证的一个简单实现(结合Form认证)!      
关于单点认证的一个简单实现(结合Form认证)!        
<!--<authorization>
关于单点认证的一个简单实现(结合Form认证)!            <deny users="?"/>
关于单点认证的一个简单实现(结合Form认证)!        </authorization>
-->
关于单点认证的一个简单实现(结合Form认证)!            
关于单点认证的一个简单实现(结合Form认证)!        
关于单点认证的一个简单实现(结合Form认证)!        
<httpModules>
关于单点认证的一个简单实现(结合Form认证)!            
<add name="SSOAuthenticateHttpModule" type="SSO.SSOAuthenticateHttpModule"/>
关于单点认证的一个简单实现(结合Form认证)!        
</httpModules>
关于单点认证的一个简单实现(结合Form认证)!        
<!--
关于单点认证的一个简单实现(结合Form认证)!            如果在执行请求的过程中出现未处理的错误,
关于单点认证的一个简单实现(结合Form认证)!            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
关于单点认证的一个简单实现(结合Form认证)!            开发人员通过该节可以配置
关于单点认证的一个简单实现(结合Form认证)!            要显示的 html 错误页
关于单点认证的一个简单实现(结合Form认证)!            以代替错误堆栈跟踪。
关于单点认证的一个简单实现(结合Form认证)!
关于单点认证的一个简单实现(结合Form认证)!        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
关于单点认证的一个简单实现(结合Form认证)!            <error statusCode="403" redirect="NoAccess.htm" />
关于单点认证的一个简单实现(结合Form认证)!            <error statusCode="404" redirect="FileNotFound.htm" />
关于单点认证的一个简单实现(结合Form认证)!        </customErrors>
关于单点认证的一个简单实现(结合Form认证)!        
-->
关于单点认证的一个简单实现(结合Form认证)!    
</system.web>
关于单点认证的一个简单实现(结合Form认证)!
</configuration>
关于单点认证的一个简单实现(结合Form认证)!







认证网站,比较简单,有一个负责登陆的页面,我就在上面放了一个Button和一个TxtBox
 1关于单点认证的一个简单实现(结合Form认证)!using System;
 2关于单点认证的一个简单实现(结合Form认证)!using System.Data;
 3关于单点认证的一个简单实现(结合Form认证)!using System.Configuration;
 4关于单点认证的一个简单实现(结合Form认证)!using System.Web;
 5关于单点认证的一个简单实现(结合Form认证)!using System.Web.Security;
 6关于单点认证的一个简单实现(结合Form认证)!using System.Web.UI;
 7关于单点认证的一个简单实现(结合Form认证)!using System.Web.UI.WebControls;
 8关于单点认证的一个简单实现(结合Form认证)!using System.Web.UI.WebControls.WebParts;
 9关于单点认证的一个简单实现(结合Form认证)!using System.Web.UI.HtmlControls;
10关于单点认证的一个简单实现(结合Form认证)!
11关于单点认证的一个简单实现(结合Form认证)!public partial class _Default : System.Web.UI.Page 
12


认证助手类
 1关于单点认证的一个简单实现(结合Form认证)!using System;
 2关于单点认证的一个简单实现(结合Form认证)!using System.Collections.Generic;
 3关于单点认证的一个简单实现(结合Form认证)!using System.Text;
 4关于单点认证的一个简单实现(结合Form认证)!using System.Security.Cryptography;
 5关于单点认证的一个简单实现(结合Form认证)!
 6关于单点认证的一个简单实现(结合Form认证)!namespace SSO
 7

相关文章:

  • 2021-12-30
  • 2021-07-06
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2021-11-09
猜你喜欢
  • 2022-12-23
  • 2021-10-28
  • 2021-08-02
  • 2021-07-05
  • 2021-06-11
  • 2021-11-25
相关资源
相似解决方案