CAS5.2x单点登录(十一)---------.net客户端对接cas

上一篇我们已经说过了java整合cas的过程及代码配置。而我们这篇就以.net来讲解,因为这两个比较特殊,目前我对接了这么多种语言的客户端,也就是java、.net在有证书的过程会出现问题,主要是我们自己生成的证书,如果是公网证书其实是不会有问题的,但是我们也要说下我们自己生成的证书下如何整合.net
这边我们也会分两部分来讲解:
1、http下的cas整合.net
2、https下的cas整合.net,这个https的证书是我们自己通过keytool生成的


cas(http)整合.net

cas单点登录为啥会比较流行的原因就是他支持大多数主流的语言,而我们.net也是他众多支持中的一种,代码其实可以直接去github去找.net的cas,我们这边就不说怎么去找吧,我们直接看.net如何整合进去,我们这边会基于mvc来整合,首先我们看我们最主要的配置,也就是web.config
配置一,这个是在web.config中的第一处配置,还有第二处配置

<casClientConfig
    casServerLoginUrl="http://localhost:8080/cas/login"
    casServerUrlPrefix="http://localhost:8080/cas/"
    serverName="http://localhost:6858" 
    cookiesRequiredUrl="~/CookiesRequired.aspx" 
    redirectAfterValidation="true" 
    gateway="false" renew="false" 
    singleSignOut="true" 
    ticketTimeTolerance="5000" 
    ticketValidatorName="Cas20"  
    serviceTicketManager="CacheServiceTicketManager" 
    gatewayStatusCookieName="CasGatewayStatus" />

配置二

 <system.web>
    <authentication mode="Forms">
      <forms name=".DotNetCasClientAuth" loginUrl="http://localhost:8080/cas/login" cookieless="UseCookies" />
    authentication>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <httpModules>
      <add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient" />
    httpModules>
  system.web>

到这里为止我们就已经将.net的配置已经配置好了,其实我这边省略了好多配置,最主要的就是这些,这里有个非常值得大家注意的就是forms标签千万不要添加path的路径,官方文档中是要配置的,但是配置完后会出现无限重定向,无法接入,这个时候你只需要将这个path给删掉就完全可以接入进去了,这个可能是很多人接入过程会碰到最大的问题(之前别人就是因为加了这个导致接入过程报错,然后一直说是我们cas服务器的问题,最后我这个不会.net的人硬生生花了2天时间去给他写了这个demo)。记住这个path不要加,到这里.net其实就已经配置好了,最大的问题就是这个path(有点啰嗦)。

cas(https)整合.net

其实如果我们使用公网的证书,其实这个其实是不需要讲解的,因为就和上面的http整合一样,只需要将访问路径改成https的,但是我们有时候也会碰到自己生成的证书,这个时候我们就会发现我们不管怎么处理都无法解决他报的错误:重定向过多的问题。我也找了好多解决办法,发现都没有用,然后我就和他们说就用http吧,哈哈,不会可以规避,但是这个一直是一个雷,如果别人就是要https呢,并且这个证书就不是公网的呢,那么我们始终还是要解决这个棘手的问题,然后找来找去,发现只有修改cas提供的.net的源码包,其实这个问题就是未能为 SSL/TLS 安全通道建立信任关系,毕竟是我们自己生成的证书,怎么可能能识别,别人开源cas的人也不可能帮你所有的事情都想到吧,这个时候就只能通过我们自己来修改源码来解决这个问题。
我们知道cas还有一个好处就是他的东西是完全开源的,服务端的代码和客户端的源码都是开源的,这样我们就可以自己修改他的东西来达到我们的需求,我这边就会通过修改cas的源码然后重新生成解决方案,最后将生成dll文件和xml文件放入到我们具体需要引入cas项目的地方。
我们去github下载.net的cas的源码,.net的cas源码
然后我们只需要找到\Utils\HttpUtil.cs这个文件,我们接下来的修改就是基于这个文件的,其实暂时针对这个问题其实也只需要修改这个文件
1、首先我们需要添加如下命名空间

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方法中添加验证服务器证书回调自动验证代码

 string responseBody = null; 

  //-- 以下新添加的代码:验证服务器证书回调自动验证 
  ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); 
  //-- 以上为新添加的代码 

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

这这个方法只需要添加我们注释那一行就可以。
4、我们重新将cas的源码生成解决方案。
5、找到生成的DotNetClient.dll和DotNetClient.xml文件复制到你具体项目中。
到此为止我们https整合的问题也已经整合完毕,其实整合这种可能会碰到坑,但是大家一定要多查资料然后取验证,千万别怕。只有碰到问题去解决问题才能有成长,其实解决这个问题我是非常拒绝的(因为我完全不懂.net,但是别人一直说无法接入的时候,总说是你cas服务端的问题的时候,我才决定自己去接,结果发现是他自己的问题)。

其实不管是java还是.net或者是其他语言对于接入http其实都是没有问题的,而https的话其实就是因为我们自己的生成的证书问题,如果是公网的证书,其实是没有问题的,假设有问题多查资料是能够解决的
参考文章:这个就是我修改源码参考的文章

你可能感兴趣的:(cas,.net)