• 第一部分:安装配置 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了。

转载于:https://my.oschina.net/liangzhenghui/blog/538052

实现 ASP.NET WebForm Client相关推荐

  1. ASP.NET AJAX Client Library: 更繁?更简?

    这两周周末终于决定忙里偷闲,利用业余时间好好学习ASP.NET AJAX,虽然服务器端控件比如UpdatePanel.Timer等很好用,不过总感觉雾里看花,没法看到ASP.NET AJAX的原貌,所 ...

  2. asp.net webform 与asp.net mvc 混合开发项目总结

    公司里的一个web项目 运行速度比较慢(原来是asp.net webform  建立的时候是通过新建网站 不是web项目) 这个项目最早是VS2003 做的时候asp.net也不是很熟悉 订单登记的页 ...

  3. asp.net webform html,ASP.NET WebForm页面内容输出方式

    这次我们谈的话题是"Web Form页面上输出内容的方式".这其实是一个非常旧的话题了,因为本文的内容甚至可以运用于ASP.NET 1.1之上.不过这个话题的适用范围很广,因为即使 ...

  4. 通过HTTP抓包,深入理解ASP.NET WebForm ViewState

    为什么80%的码农都做不了架构师?>>>    上周完成了一个从ASP.NET WebForm 开发的站点抓包的功能.该功能要求使用该网点内的帐号通过我们自己的程序获取网站内的数据. ...

  5. 【原】ASP.Net WebForm的发布(图解)

    全文包括如下三部分内容: 方式一.发布网站至默认的IIS路径下 方式二.发布网站至指定的IIS路径下 注:发布过程中可能出现的错误信息及解决方法 --------------------------- ...

  6. Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net

    Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...

  7. 利用Bootstrap+Avalonjs+EntityFramework 开发ASP.NET WebForm应用程序(上)

    本文将介绍如何利用Bootstrap+Avalonjs+EntityFramework 开发ASP.NET WebForm应用程序,分为上下两篇.上篇主要介绍实现,下篇主要介绍界面. 打开Visual ...

  8. ASP.NET WebForm和Mvc开发的比较

    在初步了解MVC后,发现很多人对于MVC和三层架构开发概念上会有很大的混淆,所以把这两天的学习笔记整理一下,分享给自己的同学们.同时也做一个小Demo,让没有接触过MVC开发的同学,能对MVC有一个简 ...

  9. Hello Blazor:(1)像ASP.NET WebForm一样写代码

    写在前面 最近,刚开始学习Blazor. 对于后端出身的程序员来说,使用Blazor上手开发前端程序,门槛确实降低了不少.还在观望的朋友可以尝试入坑了. 在学习和编写Blazor程序的过程中,我产生了 ...

最新文章

  1. Oracle手工建库
  2. AOP配置开发入门案例
  3. python代码直接关机_python实现电脑自动关机
  4. 如何定制化SAP Spartacus的页面布局
  5. 经典排序算法(12)——总结
  6. 驱动开发中常用的操作和小知识
  7. 滤波器开发之三:基于算数平均的阶进平滑滤波器
  8. state的简写方式
  9. JQ中使用FormData+Ajax发送请求及使用express接收处理FormData数据
  10. Vue 方法与事件处理器
  11. SQL 2000 中如何 纵表变横表
  12. python中文字体下载_对Python生成汉字字库文字,以及转换为文字图片的实例详解...
  13. 分布式数据存储系统:三要素
  14. 罗德里格旋转公式推导
  15. 佳能eosr控制环能否计算机控制,镜头不够EF口来凑 佳能EOS R转接性能测试
  16. 大数据毕业设计题目汇总 python毕设选题推荐
  17. 企业发展理论(二):偶然性理论
  18. 37本国产SCI期刊推荐!涵盖9大领域,建议收藏!①
  19. Python编程好学吗 为什么Python如此受欢迎
  20. HTML_网页设计参考手册 中文WORD版

热门文章

  1. java IO(输入输出) 字符流
  2. Mol Cell Proteomics. |胡丹丹| 雷公藤红素通过SIRT1-FXR 信号通路保护胆汁淤积性肝损伤...
  3. 数组的一些与遍历相关的方法总结
  4. C# 模拟 Post
  5. 学习C++的五十个建议(转
  6. 1.在Linux下如何使用软盘、光盘以及DOS等非Linux分区
  7. github本地文件和远端文件的协同
  8. Mouse Without Borders 一套鼠标键盘控制多台电脑
  9. 02- 流行歌曲 最新热门
  10. [云炬创业基础笔记]第六章商业模式测试7