单点登录之实战CAS5.1.x(三)——客户端集成

没有客户端光有服务器没有什么意义,cas目前提供了各大主流框架的集成方案,笔者只测试了Java和DotNet。

Java客户端比较成熟,拉取项目:https://github.com/apereo/java-cas-client,直接编译,我们需要的仅仅是cas-client-core,其他都不需要。

坑5:客户端还需要log4j和slf4j,请手工加入这3个包:log4j-1.2.17.jar、slf4j-api-1.7.25.jar、slf4j-log4j12-1.7.25.jar。具体版本号无所谓,能对得上就行了。

将这些依赖加入到你的项目,并配置web.xml,这里建议去下载官方的示例:https://github.com/cas-projects/cas-sample-java-webapp,你需要的都有了,非常齐全也没坑就不赘述了。

这里只有一个要注意的是,如果返回的信息中包含了中文,那么需要给CAS Validation Filter配置一个参数明确一下编码:

        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>

部署好客户端之后尝试打开index.jsp或任何页面,应该会自动跳转到sso服务器进行登录认证,但是事实上我们只会得到一个警告,服务未注册,不能使用cas服务器。

坑6:默认的cas服务器未添加任何服务,也就是说随便哪个客户端都不行。有很多办法,根据官方的文档有各种途径添加认证服务,我也没深入研究,只选择了一个最简便的方法,在application.properties文件中追加一行:

cas.serviceRegistry.initFromJson=true

重启后再次打开客户端,如果我猜的没错的话还是不行对吧,这是因为cas默认只支持https和imaps,如果你的客户端不是https方式就会被拒。关于这个问题网上有不少错误信息,很多文章会要求你关闭cas服务器的https,这完全是误区,客户端有没有启动https和cas服务器没有任何关系。这里我们打开目录/cas/WEB-INF/classes/services,找到HTTPSandIMAPS-10000001.json,这就是注册服务的入口,可以看到一行:"serviceId" : "^(https|imaps)://.*",,将其改成"serviceId" : "^(http|https|imaps)://.*",并保存。

注意:这里如果你确实有自己的过滤需求,不允许其他的系统集成进来,你就写自己的正则表达式即可。

重启后打开客户端页面,终于能跳转到cas登录界面了有木有?赶紧试试输入用户名和密码后,嗯炸了,jre报无法找到证书路径对吧?我们需要把之前我们为Tomcat生成的https证书导入到客户端运行的jre里面去,否则就会报证书路径找不到,还是使用jre自带的keytool工具,将证书格式转换一下之后用import方式导入到jre中,jre证书的密码是changeit(醉了有木有?)。

注意!如果你的jre是6.0或以下,而你使用的证书是比较新的HTTP/2而非1.1,那么是认不出来的!你需要将bcprov类库引入到jre中,并在java.security中加入一行:

security.provider.9=org.bouncycastle.jce.provider.BouncyCastleProvider

再次重启服务器和客户端,打开客户端并成功登陆后,返回示例页面,扩展属性是不是空的?这里再次打开HTTPSandIMAPS-10000001.json文件,如下文修改以让其返回所有可用属性:

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(http|https|imaps)://.*",
  "name" : "HTTPS and IMAPS",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000,
  "attributeReleasePolicy" : {
    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
  }
}

至此,Java客户端配置完成!

DotNet客户端没有Java客户端成熟,但勉强也能用,下载:https://github.com/apereo/dotnet-cas-client并编译,得到2.0-4.5各个版本的dll,引入项目即可。

web.config的配置按照官方给出的例子即可,基于form的验证也可以自己灵活控制。

坑7:一个几乎可以肯定目前尚未解决的问题,DotNet客户端无法获取更多详细信息,只能拿到用户名。注意观察DotNet与Java的客户端验证类可以发现,Java使用的是较新的Cas30而DotNet用的是Cas20,这个硬伤暂时可能没有什么办法。

DotNet服务器同样存在证书问题,不过这里可以变通一下,将证书的校验屏蔽掉,在HttpUtil.cs中PerformHttpGet和PerformHttpPost的方法中,开头加入这句话:

ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

重新编译部署即可。

至此DotNet客户端的集成完成!

转载于:https://my.oschina.net/viperwhip/blog/1528620

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值