• 第一部分:安装配置 Tomcat
  • 第二部分:安装配置 CAS

第三部分:实现 ASP.NET WebForm Client

1. 下载.NET CAS client。

.NET CAS Client 下载地址:https://wiki.jasig.org/display/CASC/.Net+Cas+Client

下载“dotnet-client-1.0-Src.zip”并解压缩。

2. 配置 CAS DotNetClient

以管理员身份启动Visual Studio(目的为了随后可以直接将网站发布到IIS),打开“DotNetCasClient.vs2010.sln”解决方案。

(1)项目“DotNetCasProxyDemoApp”暂时用不到,从解决方案中移除。

(2)将“DotNetCasClient”项目中“Properties”文件夹下的“AssemblyInfo.cs”删除,将“AssemblyInfo.cs.tmpl”重命名为“AssemblyInfo.cs”。

(3)打开将“DotNetCasClient”项目中“Properties”文件夹下的“AssemblyInfo.cs”,将所有“$WCREV$”替换成“0”(或其它表示版本的数字)。

(4)将“ExampleWebSite”项目设置为启动项。

(5)将“ExampleWebSite”项目根文件夹下的“web.config.sample”重命名为“web.config”

(6)打开“web.config”文件,找到“casClientConfig”节点,将“casServerLoginUrl”属性设置为“https://192.168.0.123:8443/cas/login”,将“casServerUrlPrefix”属性设置为“https://192.168.0.123:8443/cas/”,将“serverName”属性设置为“http://localhost:3273/ExampleWebSite”。

说明:192.168.0.123是前面我们配置好的CAS服务器IP地址;“serverName”属性中3273为运行该项目时IISExpress自动分配的端口号,如果项目发布到客户端IIS上,建议将“serverName”属性更改为“http://192.168.0.153/ExampleWebSite”,其中192.168.0.153为客户端IP地址。注意:“serverName”属性中网络地址最后不要加“/”。

(7)从“web.config”文件中找到“authentication”节点,将“loginUrl”属性设置为“https://192.168.0.123:8443/cas/login”,将“path”属性设置为“/ExampleWebSite/”。

(8)保存全部修改,重新编译解决方案。

3. 调试 CAS DotNetClient

(1)鼠标右击“DotNetCasClient”项目根目录下的“Default.aspx”,选择“在浏览器中查看...”

(2)单击“Authenticated Users Only”连接,系统自动重定向到CAS登录页面(如果IE有证书警告信息,直接点击“继续浏览此网站”),此时IE会报网页有错误。

这是由于CAS中的一段脚本引起的。如图所示,调试信息指出是“cas/js/cas.js”脚本出了问题。

(3)回到IP地址为“192.168.0.123”的服务器,以管理员身份编辑“%TOMCAT_HOME%\webapps\cas\js\cas.js”,滚动到文件最下方添加两行代码并保存。如图所示:

(4)回到客户端机器,重复步骤(1),这回IE不再报网页有错误。

注意:每次运行项目时强烈建议清除IE缓存及Cookies,防止因IE缓存造成不必要的错觉。

(5)在CAS登录窗体中输入用户名和密码,均为“admin”,此时会出现登录异常,要么IE提示一遍一遍重新登录,要么IE会出现“假死”现象。如果使用Chorme浏览器,你就会发现遭遇“重定向循环”问题了。

4. 解决CAS DotNetClient重定向循环问题

CAS DotNetClient重定向循环问题早就有人发现了,并且提出了各种解决办法。通过检索会发现最有帮助的就是博客园“邢少”的《CAS 与.net 集成的 “循环重定向”问题分析》一文。在这篇博文中,建议用户直接增加配置:

<sessionState mode="StateServer" cookieless="UseCookies" timeout="36000"></sessionState>

其目的为:1、启用会话状态;2、开始asp.net状态服务〔确保会话的持久,不在莫名其妙的失效。〕。

然而,通过对项目“DotNetCasClient”代码的追踪和分析发现,状态信息是通过Cache存储的,与sessionState的关系应该不大。本人认为该方法并不能解决问题。

通过在“DotNetCasClient\Validation\TicketValidator\AbstractUrlTicketValidator.cs”设置断点,并通过F11逐步运行程序发现问题出在“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。”

因此,提供如下修改方案:

(1)在Visual Studio中打开“CASDotNetClient”项目中的“\Utils\HttpUtil.cs”文件,添加如下命名空间:

using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;

(2)在HttpUtil类中增加如下方法:

internal static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true;
}

(3)在PerformHttpGet方法中添加验证服务器证书回调自动验证代码,添加代码后的PerformHttpGet方法如下:

internal static string PerformHttpGet(string url, bool requireHttp200)
{
string responseBody = null; //-- 以下新添加的代码:验证服务器证书回调自动验证
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
//-- 以上为新添加的代码 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (!requireHttp200 || response.StatusCode == HttpStatusCode.OK)
{
using (Stream responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (StreamReader responseReader = new StreamReader(responseStream))
{
responseBody = responseReader.ReadToEnd();
}
}
}
}
} return responseBody;
}

(4)保存修改并重新生成解决方案。

5. 测试 CAS DotNetClient

(1)鼠标右击“DotNetCasClient”项目根目录下的“Default.aspx”,选择“在浏览器中查看...”

(2)单击“Authenticated Users Only”连接,系统自动重定向到CAS登录页面(如果IE有证书警告信息,直接点击“继续浏览此网站”)。

(3)输入用户名、密码(均为“admin”,或均为“bob”),CAS自动完成登录并重定向回原有网站。

至此,基于ASP.NET WebForm的CAS客户端已经完全调试通过。下面就“重定向循环”做进一步讨论讨论

6. 深入讨论DotNetClient重定向循环问题

这里提供两篇我从网上搜到的解决办法,并探讨解决办法存在的问题。

(1)HOWTO CASifying ASP.NET WebApp - ExampleWebsite

此文应该是官方网站上放出来的解决办法,应该具有权威性。它提供的主要解决办法就是让CAS Server和CAS Client互相信任对方的证书,从而避免SSL因不信任证书造成重定向循环。然而实际情况确是IE根本不会信任用户自己生成的证书,即便加入信任证书根列表也不行,造成“重定向循环”依然存在。

另外,此篇文章要求配置IIS支持SSL,其实根本没有必要,IIS不配置SSL也可以正常运行。当然,为了安全起见,配置SSL也没有什么坏处。

(2)博客园“邢少”的《CAS 与.net 集成的 “循环重定向”问题分析》一文

该文试图从sessionState配置上解决问题,但从本人的实践看来,“重定向循环”并未得到解决,“重定向循环”问题的本质还是SSL证书信任问题。

7. 关于DotNetClient注销问题

关于DotNet注销网上有很多介绍的材料。我这里就不再多说什么了。留下个链接供大家参考。《解释CAS Logout问题

为了便于查看,将《解释CAS Logout问题》一文的主要内容放在下面便于查阅:

CAS Logout是一个非常费解的问题,我在这里简单解释一下:

假设有webapp1, webapp2, cas server,webapp1, webapp2均受cas server保护。

第1种不能logout的情况:

1)登录了WebApp1,redirect到caserver,casserver认证后,再redirect到webapp1,ok!

2)http方式 lougout casserver1,即http://yale_casserver:8080/cas/lougout,显示logout成功

3)访问webapp2,还能访问!这是非常正常的一种情况,因为你不通过https来注销,casserver怎么“杀”掉它通过https发给你的TGC Cookie?

第2种不能logout的情况:

1)登录了WebApp1,redirect到caserver,casserver认证后,再redirect到webapp1,ok!

2)https方式 lougout casserver1,即https://yale_casserver:8443/cas/lougout,显示logout成功

3)访问webapp1,还能访问!访问webapp2,不能访问,重定向到casserver要求登录!这也是非常正常的一种情况,因为你已经能够访问,你继续可以继续访问,CASLogout不能阻止你访问webapp1,它只能阻止你访问webapp2,因为你已经被允许访问webapp1,而webapp2则还没有,如果你在(1)的时候,顺带也访问webapp2,那么你的注销将毫无作用了,CAS无法阻止你访问这两个webapp,因为你有Service Ticket。

如果你对此费解,那时因为你已为Logout就是退出系统,那我只能表示遗憾,因为CAS Logout的作用不是这样,它的作用是阻止你继续通过TGC(它简单地清楚了IE的TGC Cookie)来获取ST,阻止你获取通向其他web应用的Ticket。

所以,用完webapp1的时候,注销,然后再关闭掉IE就彻底Logout了。

(转)Yale CAS + .net Client 实现 SSO(3)的更多相关文章

  1. (转)Yale CAS + .net Client 实现 SSO(5)

    第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 第五部分:扩展基于数据库的身份验证 1. ...

  2. (转)Yale CAS + .net Client 实现 SSO(4)

    第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 1.下载 Microsoft JDBC ...

  3. (转)Yale CAS + .net Client 实现 SSO(2)

    第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 1. 下载 CAS 及.NET CAS client. CAS下载地址:http://www.jasig.org/cas/download ...

  4. (转)Yale CAS + .net Client 实现 SSO(6)

    第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 第五部分:扩展基于数据库的身份验证 第六 ...

  5. (转)Yale CAS + .net Client 实现 SSO(1)

    由于信息系统集成需要,最近研究了一下CAS.从网上找了不少资料,很多是针对Java平台的,为数不多的针对.net Client的文章往往片面的介绍某个方面,照着去做确会遇到大量的问题,特别是“重定向循 ...

  6. Yale CAS + .net Client 实现 SSO 的完整版

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  7. CAS实现单点登录SSO执行原理及部署

    一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...

  8. CAS实现单点登录SSO执行原理探究超详细

    一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...

  9. CAS实战のclient自定义过滤器

    我们在配置cas client肯定写过如下代码: <filter> <filter-name>CASFilter</filter-name> <filter- ...

随机推荐

  1. Android实现数据存储技术

    转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...

  2. Dapper链接查询扩展

    一对多映射关系 /// <summary> /// 一对多连接查询 /// </summary> /// <typeparam name="FirstT&quo ...

  3. Linux下校验下载文件的完整性(MD5,SHA1,PGP)

    查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...

  4. Hadoop从2.2.0到2.7

    Hadoop2.2.0 GA release 通用版本,Hadoop2.2.0就是一个通用版本 Hadoop2.2.0是从Hadoop1.1.0升级过来的,增加了以下特性: 1.增加了YARN: 2. ...

  5. IOS开发 xcode报错之has been modified since the precompiled header was built

    转载的文章  很实用 IOS开发xcode报错之has been modified since the precompiled header was built 今天做百度地图的时候第一次发现下面错误 ...

  6. 关于 2dx v3.7 UIScale9Sprite的bug

    关于 2dx v3.7 UIScale9Sprite的bug 刚把引擎从js binding v3.0升级到v3.7,发现了一些bug,这里先说说关于scale9sprite的 1. 关于capIns ...

  7. nginx 反向代理设置

    假设对本机80端口的访问为一台服务器,对本机8000端口的访问为另一台服务器,下面这样写一个nginx的反向代理配置,就可以实现所有请求都转移 server {listen 0.0.0.0:80;se ...

  8. Shodan!

    Shodan! 简介 首先先介绍一下Shodan CNNMoney的一篇文章写道,虽然目前人们都认为谷歌是最强劲的搜索引擎,但Shodan才是互联网上最可怕的搜索引擎. 与谷歌不同的是,Shodan不 ...

  9. html+css-水平居中-不定款块状元素方法(二)

    来源:http://www.imooc.com/code/6364 除了上一节讲到的插入table标签,可以使不定宽块状元素水平居中之外,本节介绍第2种实现这种效果的方法,改变元素的display类型 ...

  10. Table of Contents - Nginx

    Downloading and  Installing Nginx Nginx for Windows Basic Nginx Configuration Configuration File Syn ...