(转)Yale CAS + .net Client 实现 SSO(3)
- 第一部分:安装配置 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)的更多相关文章
- (转)Yale CAS + .net Client 实现 SSO(5)
第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 第五部分:扩展基于数据库的身份验证 1. ...
- (转)Yale CAS + .net Client 实现 SSO(4)
第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 1.下载 Microsoft JDBC ...
- (转)Yale CAS + .net Client 实现 SSO(2)
第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 1. 下载 CAS 及.NET CAS client. CAS下载地址:http://www.jasig.org/cas/download ...
- (转)Yale CAS + .net Client 实现 SSO(6)
第一部分:安装配置 Tomcat 第二部分:安装配置 CAS 第三部分:实现 ASP.NET WebForm Client 第四部分:实现基于数据库的身份验证 第五部分:扩展基于数据库的身份验证 第六 ...
- (转)Yale CAS + .net Client 实现 SSO(1)
由于信息系统集成需要,最近研究了一下CAS.从网上找了不少资料,很多是针对Java平台的,为数不多的针对.net Client的文章往往片面的介绍某个方面,照着去做确会遇到大量的问题,特别是“重定向循 ...
- Yale CAS + .net Client 实现 SSO 的完整版
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- CAS实现单点登录SSO执行原理及部署
一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...
- CAS实现单点登录SSO执行原理探究超详细
一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Centra ...
- CAS实战のclient自定义过滤器
我们在配置cas client肯定写过如下代码: <filter> <filter-name>CASFilter</filter-name> <filter- ...
随机推荐
- Android实现数据存储技术
转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...
- Dapper链接查询扩展
一对多映射关系 /// <summary> /// 一对多连接查询 /// </summary> /// <typeparam name="FirstT&quo ...
- Linux下校验下载文件的完整性(MD5,SHA1,PGP)
查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...
- Hadoop从2.2.0到2.7
Hadoop2.2.0 GA release 通用版本,Hadoop2.2.0就是一个通用版本 Hadoop2.2.0是从Hadoop1.1.0升级过来的,增加了以下特性: 1.增加了YARN: 2. ...
- IOS开发 xcode报错之has been modified since the precompiled header was built
转载的文章 很实用 IOS开发xcode报错之has been modified since the precompiled header was built 今天做百度地图的时候第一次发现下面错误 ...
- 关于 2dx v3.7 UIScale9Sprite的bug
关于 2dx v3.7 UIScale9Sprite的bug 刚把引擎从js binding v3.0升级到v3.7,发现了一些bug,这里先说说关于scale9sprite的 1. 关于capIns ...
- nginx 反向代理设置
假设对本机80端口的访问为一台服务器,对本机8000端口的访问为另一台服务器,下面这样写一个nginx的反向代理配置,就可以实现所有请求都转移 server {listen 0.0.0.0:80;se ...
- Shodan!
Shodan! 简介 首先先介绍一下Shodan CNNMoney的一篇文章写道,虽然目前人们都认为谷歌是最强劲的搜索引擎,但Shodan才是互联网上最可怕的搜索引擎. 与谷歌不同的是,Shodan不 ...
- html+css-水平居中-不定款块状元素方法(二)
来源:http://www.imooc.com/code/6364 除了上一节讲到的插入table标签,可以使不定宽块状元素水平居中之外,本节介绍第2种实现这种效果的方法,改变元素的display类型 ...
- Table of Contents - Nginx
Downloading and Installing Nginx Nginx for Windows Basic Nginx Configuration Configuration File Syn ...