0
点赞
收藏
分享

微信扫一扫

CAS单点登录--Clients

在觉 2021-09-23 阅读 128

更新hosts

192.168.0.116       www.jacky.sso.com
127.0.0.1       mmoayyed.unicon.net

测试服务转发

输入具体地址https://www.jacky.sso.com:8443/cas/login?service=http://localhost:9080/sample,进行登录,输入用户名、密码登录成功!然后跳转到一个http://localhost:9080/sample?ticket=xxxxxxxxxxxxxx的地址。


后面接入的就是指具体的服务地址。说明先前的配置是其作用的,因为配置了http通过服务认证。
若不能转发则需要配置服务访问策略。

服务访问策略

解压cas.war文件,可以找到org/WEB-INF/classes/services,将services目录复制到cas-gradle-overlay-template中的resources目录中,可以添加一个json文件,如下:Localhost-10000003.json

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^http://127\\.0\\.0\\.1.*",
  "name" : "web",
  "id" : 10000003,
  "evaluationOrder" : 1
}

以上内容就是允许http:127.0.0.1的访问。

新增一个json文件:
文件名按照规范用name-serviceId.json

  • @class:必须为org.apereo.cas.services.RegisteredService的实现类
  • serviceId:对服务进行描述的表达式,可用于匹配一个或多个 URL 地址
  • name: 服务名称
  • id:全局唯一标志
  • evaluationOrder:定义多个服务的执行顺序

同时在application.properties里添加如下内容,开启服务端对json配置的读取:


#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true
#自动扫描服务配置,默认开启
cas.serviceRegistry.watcherEnabled=true
#120秒扫描一遍
cas.serviceRegistry.schedule.repeatInterval=120000
#延迟15秒开启
cas.serviceRegistry.schedule.startDelay=15000
#资源加载路径
cas.serviceRegistry.json.location=classpath:/services

注意,这里的配置网上很多资料都不对,配置错误服务无法启动,请参考官网service-registry

还要添加依赖,如下:

compile "org.apereo.cas:cas-server-support-json-service-registry:5.3.2"

然后重新打包cas.war并部署。

下载官方demo

官方提供了一个简单的CAS Client供测试使用,可以直接下载cas-sample-java-webapp

配置cas项目

然后导入idea中,只需要改变web.xml,如下:



casServerLoginUrl是配置cas-server地址,serverName是登录成功后转发的地址。

在pom.xml文件中添加tomcat plugin,可以方便的启动服务,如下:

<!--  tomcat7 plugin -->
          <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <httpsPort>8443</httpsPort>
                    <keystoreFile>D:/mine12-6/cas/tomcat.keystore</keystoreFile>
                    <keystorePass>123456</keystorePass>
                    <port>8083</port>
                    <path>/cas</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>

同时配置https,将Server配置中的tomcat.keystore文件复制到当前目录并添加以上路径和密码。
启动服务: mvn tomcat7:run
这样可以方便的启动并访问服务,如:https://mmoayyed.unicon.net:8443/cas/http://mmoayyed.unicon.net:8083/cas/

当访问服务时,请求会被web.xml配置的cas filter所拦截,若发现没有登录票据就会被转发到cas-server去登录,然后输入账号和密码登录完成后,就会被再次转发回来。

转发回来时,一般会遇到2种问题,一是unable to find valid certification path to requested target异常,二是未认证授权的服务,如下图:

转发时异常处理一

关于异常unable to find valid certification path to requested target, 是因为jre里也需要查找相应的认证证书。
注意,在上一篇文章中,已讲过生成客户端密钥库文件,就是把密钥文件导入到jre中,若是导入后还是报异常,可以试下下面的另一种办法。

转发时异常处理二

1、 下载InstallCert.java:InstallCert.java
2、 编译:javac InstallCert.java
3、 运行:java InstallCert localhost:8443,当提示Enter certificate to add to trusted keystore or 'q' to quit: [1]时,输入1,回车
4、 再次运行java InstallCert localhost:8443,提示如下即无误。


5、 复制InstallCert.java目录下的jssecacerts文件至你的%JAVA_HOME%/jre/lib/security目录下即可。

注意:如果你在其他地方下载了InstallCert.java ,在jdk7下面可能会出现这样的错误,

javax.net.ssl.SSLException: java.lang.UnsupportedOperationException

如果出现这样的错误,直接修改InstallCert.java

@Override
public X509Certificate[] getAcceptedIssuers() {
    return new X509Certificate[0];
    // throw new UnsupportedOperationException();注释该行,用上面这行替代即可
}

当然,你可以直接在上面下载使用。
6、 如果以上操作成功后,在idea里还是报unable to find valid certification path to requested target错,那么请检查你的idea使用的jdk是否是系统JAVA_HOME的jdk,若不是,修改即可。

当异常处理完毕后,再次访问,则应该出现以下界面了。


至此,cas-client终于与cas-server连接成功。

举报

相关推荐

0 条评论