CAS——实现单点登录

时间:2022-12-13 18:48:23

            接着上篇文章,已经配置好CAS的服务,接下来在我的demo中的两个应用中配置就可以实现单点登录了。拿的是我们新生入学中的两个模块来配置客户端。

 Application 1

<configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework,   Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    <!--cas 开始-->
    <section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient"/>
    <!--cas 结束-->
  </configSections>

  <!--cas 开始-->
  <!--每个系统发布的地址-->
  <casClientConfig casServerLoginUrl="http://192.168.24.94:8988/cas-end/login"
                   casServerUrlPrefix="http://192.168.24.94:8988/cas-end/"
                   serverName="http://localhost:4829/"
                   redirectAfterValidation="true"
                   renew="false"
                   singleSignOut="true"
                   ticketValidatorName="Cas20"
                   serviceTicketManager="CacheServiceTicketManager"/>
  <!--cas 结束-->

    <!--cas 开始-->
    <authentication mode="Forms">
      <forms 
        loginUrl="http://192.168.24.94:8988/cas-end/login" 
        timeout="30" 
        defaultUrl="~/FreshStudentReport/FreshStudentReport"
        cookieless="UseCookies" 
        slidingExpiration="true"/>
      
      <!--path="/NetCasClient"-->
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>
    <!--cas 结束-->

  <!--cas 开始-->
    <httpModules>
      <add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
    </httpModules>
    <!--cas 结束-->

 Application 2

            Application 1的配置是一样的,因为都是首先到一个CAS认证中心认证。这是两个客户单的应用就配置好了。


            正常单点登录的效果是:用户只需要登录一次就可以访问所有相互信任的应用系统,也就是这两个应用,当第一个登录成功之后,登录第二个应用可以不用输入CAS端验证的用户名和密码了,直接跳转到系统内。

            在一切都配置好了之后本以为会实现单点登录的效果,可是对于CAS,事与愿违的事情总是太多。在Application1登录成功之后,Application2并没有直接跳转,而是需要重新登录的。在宏杰大牛的帮助下终于实现了。修改了CAS客户端的配置。过程是酱紫的:

            在ticketGrantingTicketCookieGenerator.xml文件中将下列属性设置为true

CAS——实现单点登录

            之后应用1登录,

CAS——实现单点登录


            应用2可可以直接进入自己的界面:

CAS——实现单点登录

            至此就实现了单点登录的效果。

            其实这是服务端没有配置好的原因。在大牛面前,我做了个demo就好像是雕虫小技了,一些问题不知道自己如何解决。可是在解决了单点登录之后,我们最大的问题就来了,还是单点登出的问题,一直没有实现的了。原因就是缓存怎么清都清不掉……

            后来采用了一个比较笨又会让人笑的方法,暂时在我这是实现了退出,并且跳转到登录首页。我是酱紫做的:

在退出之后链接到当前应用的首页,这样应用要登录首先要再次通过CAS

Redirect("http://192.168.24.94:8988/cas/logout?service=http://localhost:52012/DistributeClass/Index");
CasAuthentication.SingleSignOut();

            可是可是……这样好像是不行的,我这只有两个Application,对于我们的云平台来说,因为我没有测试,不能保证下一次同一个用户再次登录可以跳转到他的模块,缓存没有清除,总是不行的,当时的我天真的以为我解决了问题,暂时的高兴了会,可是交了大屈大牛加到我们的云平台之后还是实现不了,我的这些天的努力好像都白费了,并没有改变什么……求安慰……