前两篇介绍了Apereo CAS以及服务器端的安装,但还不够完整,服务端还没有Application真正用起来呢!这篇文章将介绍怎么用起来

集成的目的

客户端我们想要与Apereo CAS做什么集成呢?回顾一下Apereo CAS是做什么的?Apereo CAS的一个功能就是单点登录,统一的登录登出接口与页面,让系统中的模块只需要关注在业务点,而把安全认证的功能交给统一认证来做。所以客户端的集成主要是单点登录的集成,客户端指定需要做安全认证的页面,然后Apereo CAS的安全包检测校验用户登录情况,并自动与CAS登录页面进行跳转交互。

客户端的配置

Apereo CAS提供了Springboot的包,可以让我们的集成些微方便了那么一丢丢!首先我们创建一个Springboot的application,里面带了Apereo CAS start的依赖

<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-cas</artifactId>
</dependency>

同时在application.properties文件里面指定启动的端口 server.port = 9000

有了Apereo CAS的包之后,我们就可以进行代码的配置。客户端的配置按照SpringSecurity的安全检验流程进行的:

  1. 用户尝试打开一个受保护的url,比如/admin/user
  2. AuthenticationEntryPoint被触发了,把用户重定向到配置好的CAS登录页面https://localhost:6443/cas
  3. 用户输入用户名密码,登录成功后, CAS会跳转回application指定的回调url http://localhost:9000/login/cas, 并带上ticket作为查询参数
  4. CasAuthenticationFilter一直在监听/login/cas这个路径,当发现有请求后,它会触发CasTicketValidator,由CasTickerValidator检验ticket的有效性
  5. 当ticket也验证成功后,用户将会被跳转回原来请求的受保护url

下面代码大致描述了这个过程:

@Bean
public ServiceProperties serviceProperties() {ServiceProperties serviceProperties = new ServiceProperties();serviceProperties.setService("http://localhost:9000/login/cas");serviceProperties.setSendRenew(false);return serviceProperties;
}@Bean
@Primary
public AuthenticationEntryPoint authenticationEntryPoint(ServiceProperties sP) {CasAuthenticationEntryPoint entryPoint= new CasAuthenticationEntryPoint();entryPoint.setLoginUrl("https://localhost:6443/cas/login");entryPoint.setServiceProperties(sP);return entryPoint;
}@Bean
public TicketValidator ticketValidator() {return new Cas30ServiceTicketValidator("https://localhost:6443/cas");
}@Bean
public CasAuthenticationProvider casAuthenticationProvider() {CasAuthenticationProvider provider = new CasAuthenticationProvider();provider.setServiceProperties(serviceProperties());provider.setTicketValidator(ticketValidator());provider.setUserDetailsService(s -> new User("casuser", "Mellon", true, true, true, true,AuthorityUtils.createAuthorityList("ROLE_ADMIN")));provider.setKey("CAS_PROVIDER_LOCALHOST_9000");return provider;
}
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {private AuthenticationProvider authenticationProvider;private AuthenticationEntryPoint authenticationEntryPoint;private SingleSignOutFilter singleSignOutFilter;private LogoutFilter logoutFilter;@Autowiredpublic SecurityConfig(CasAuthenticationProvider casAuthenticationProvider, AuthenticationEntryPoint eP,LogoutFilter lF, SingleSignOutFilter ssF) {this.authenticationProvider = casAuthenticationProvider;this.authenticationEntryPoint = eP;this.logoutFilter = lF;this.singleSignOutFilter = ssF;}// ...@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.authenticationProvider(authenticationProvider);}@Overrideprotected AuthenticationManager authenticationManager() throws Exception {return new ProviderManager(Arrays.asList(authenticationProvider));}@Beanpublic CasAuthenticationFilter casAuthenticationFilter(ServiceProperties sP) throws Exception {CasAuthenticationFilter filter = new CasAuthenticationFilter();filter.setServiceProperties(sP);filter.setAuthenticationManager(authenticationManager());return filter;}
}

下面这个文件配置了application中所有/secured/*,login的URL都是受保护资源,都要经过CAS认证过才可以访问:

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().regexMatchers("/secured.*", "/login").authenticated().and().authorizeRequests().regexMatchers("/").permitAll().and().httpBasic().authenticationEntryPoint(authenticationEntryPoint);}// ...
}

服务端Apereo CAS的配置

跟所有统一认证平台一样,所有application想要跟CAS做集成的,都需要在CAS配置相应的参数才可以使用。Apereo CAS提供了很多配置的方式,有YML,JSON, MongoDB以及其他(可查官网)。但高度自由的CAS一如既往的,没有提供可视化操作的界面。比如我们采用JSON的方式。首先我们需要通知Apereo CAS我们采用的是JSON的方式,并通知JSON文件的路径在哪里

cas.serviceRegistry.initFromJson=true
cas.serviceRegistry.config.location=classpath:/services

然后我们在这个目录里面,创建一个对应的JSON文件,保存我们的客户端信息,为了方面管理,建议文件名为 application_id.json, 比如"secureApp_9991.json", 内容如下:

{"@class" : "org.apereo.cas.services.RegexRegisteredService","serviceId" : "^http://localhost:9000/login/cas","name" : "CAS Spring Secured App","description": "This is a Spring App that usses the CAS Server for it's authentication","id" : 19991,"evaluationOrder" : 1
}

第一次配置从JSON加载客户端配置的话,需要重启Apereo CAS。之后再加新的客户端的话就不用再重启,Apereo CAS会自动监测这个文件夹的变动

小结

至此我们对于Apereo CAS就有了一个稍微完整一点点的了解,从服务端安装部署,到配置,以及客户端如何集成等。但从这个短时间的学习来看,如果企业已经重度使用了Apereo CAS,那相信它可以很好地服务支撑企业的应用。但如果是新的项目,特别是项目周期比较紧张的项目,并且团队之前没有对统一认证有技术积累的话,不是很建议采用Apereo CAS,这些细微的配置以及无所不在的隐藏功能,会让你给项目经理催死的! 后面我会介绍另外一个统一认证的框架,个人感觉能弥补Apereo CAS的短板的

统一认证 - Apereo CAS 客户端的集成以及小结相关推荐

  1. apereo cas开发_统一认证 - Apereo CAS 小试

    上一篇文章我们对Apereo CAS有了简要的了解,这篇文章我们将动手练习Apereo CAS.主要是CAS单机版的搭设,用户信息存储到数据库,以及dashboard的使用 做这些尝试的时候,Aper ...

  2. 集成底座统一认证配置说明

    企业的信息化建设是一个循序渐进.不断延展的过程,在这过程中企业对于体系架构.集成整合.数据治理.安全管控的要求也会不断提升,而集成底座方案的诞生就是为了解决信息化建设时缺乏整体规划.集成整合难度大.安 ...

  3. CAS统一身份认证(四):集成MySQL用户验证

    本文主要介绍CAS统一身份认证服务器JDBC密码管理,并以FreeBSD环境下的MySQL数据库为例实现CAS 6.6版的数据库用户验证.主要包括以下几个方面: JDBC密码管理 MySQL数据库准备 ...

  4. CAS认证登录,CAS客户端配置并对接多个不同服务端(spring boot)

    Spring Boot集成CAS客户端 本教程是通过访问url来进入登录界面. 需求: 我们开发平台有很多学校在使用,需要接入每个学校的统一认证CAS系统. 1.服务端设置授权域名或者IP 2.访问地 ...

  5. 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权

    上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .ne ...

  6. 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流

    上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...

  7. 【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权

    上篇文章[.NET Core项目实战-统一认证平台]第五章 网关篇-自定义缓存Redis 我们介绍了网关使用Redis进行缓存,并介绍了如何进行缓存实现,缓存信息清理接口的使用.本篇我们将介绍如何实现 ...

  8. 集成OpenLDAP与Kerberos实现统一认证(三):基于SASL/GSSAPI深度集成

    文章目录 1. 写作背景 2. 既定目标 3. 重要概念 3.1 SASL 3.2 GSSAPI 3.3 SASL与GSSAPI的关系 3.4 saslauthd 3.5 Kerberos化 4. 核 ...

  9. 集成OpenLDAP与Kerberos实现统一认证(一):整合后台数据库

    文章目录 1. 写作背景 2. 既定目标 3. 环境说明 4. 安装操作 4.1 安装OpenLDAP 4.1.1 安装软件包 4.1.2 启动服务 4.1.3 初始化 4.1.4 禁止匿名访问 4. ...

  10. 从cas-overlay-template安装apereo cas 6.1.x并连接CAS客户端

    一 什么是单点登录 简单点说 单点登录的英文名称为Single Sign-On,简写为SSO,它是一个用户认证的过程,允许用户一次性进行认证之后,就访问系统中不同的应用:而不需要访问每个应用时,都重新 ...

最新文章

  1. 这个GAN没见过猪,却能把狗变成猪
  2. 记一次CTF实验吧的代码审计
  3. mysql优化积累(持续更新中)
  4. fps测试网页_对话斗鱼云游戏负责人:做强网页端,近3成为新增用户
  5. java编写算术平均数,[求助]基础-怎样编一个计算算术平均数的程序(急啊)
  6. push api v3_充分利用Push API的指南
  7. android 分析so崩溃,分析libunity.so Release崩溃
  8. MYSQL类型与JAVA类型对应表
  9. 已锁定 java.lang.Object@25ff46f5
  10. 启明星Zynq7010制作PYNQ V2.4镜像过程记录
  11. MYSQL误删数据恢复
  12. php搭建aria2,Mac配置Aria2,高速下载百度云
  13. gnu nano显卡测试软件,显卡天梯图2018年9月最新版 秒懂桌面显卡性能排行
  14. 推荐几个学习编程的网站
  15. 如何快速成为CSDN的博客专家,以及「博客专家」申请及审核执行标准
  16. 关于获取安卓手机MAC地址的问题
  17. 软件配置---重装系统---品牌电脑重启快捷键表
  18. Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题
  19. ArcGIS中如何计算多个点到特定线的最短距离
  20. 【转】中国地理的几个概念

热门文章

  1. spring---FactoryBean与BeanFactory的区别
  2. scrapy分布式爬虫设置
  3. Xamarin iOS教程之使用按钮接接收用户输入
  4. IFRAME跨域名的解决方法,终结版(小张.NET原创)
  5. 104 基于UDP协议的socket套接字编程
  6. [转帖]SAP S/4 HANA与SAP Business Suite/R3(ECC)的区别
  7. JavaWeb各大组件生命周期
  8. Python学习之路day01——002简单数据类型
  9. CentosOS 7: 创建Nginx+Https网站
  10. 现代程序设计 作业1