统一身份认证-JAVA接入手册
2023年1月14日大约 3 分钟
统一身份认证-JAVA接入手册
统一身份认证服务核心是CAS(Central Authentication Service)认证,当前CAS Server是基于开源框架CAS 6.3.1开发集成。
支持CAS、SAML、OPENID、OAuth2.0等协议,支持JAVA、.NET、PHP等多个平台产品的CAS客户端对接,支持服务属性控制等。
本文提供的是JAVA客户端的对接说明,如需(JAVA,ASP.NET,PHP)以外的语言支持,请参考:https://apereo.github.io/cas/6.3.x/planning/Architecture.html。
前置条件
- 获取到CAS SERVER端的认证地址
- 授权当前CAS CLIENT登录地址以及登出回调地址
JAVA客户端对接说明
方式一、基于XML集成CAS
步骤一:拷贝客户端包
将
cas-client-core-3.5.1.jar拷贝到webContent/WEB-INF/lib目录下。jar包下载地址:https://mvnrepository.com/artifact/org.jasig.cas.client/cas-client-core/3.5.1
步骤二:配置web.xml文件
在web应用的
web.xml文件下添加如下配置
<!--认证过滤器配置开始-->
<!--cas退出监听-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!--cas退出拦截器-->
<filter>
<filter-name>CasSingleSignOutFilter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<!--修改cas server服务器地址前缀-->
<param-value>http://10.10.10.103:8014/cas</param-value>
</init-param>
</filter>
<!--cas认证拦截器-->
<filter>
<filter-name>CasAuthenticationFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<!--修改cas server服务器登录地址-->
<param-value>http://10.10.10.103:8014/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<!--修改当前客户端服务地址-->
<param-value>http://10.10.10.29:8080</param-value>
</init-param>
</filter>
<!--cas 票据验证地址-->
<filter>
<filter-name>CasValidationFilter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<!--修改cas server 服务登录地址前缀-->
<param-value>http://10.10.10.103:8014/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<!--修改当前客户端服务地址-->
<param-value>http://10.10.10.29:8080</param-value>
</init-param>
</filter>
<!--cas拦截器-->
<filter-mapping>
<filter-name>CasSingleSignOutFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--cas认证拦截器-->
<filter-mapping>
<filter-name>CasAuthenticationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--cas票据验证拦截器-->
<filter-mapping>
<filter-name>CasValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--认证过滤器配置结束-->步骤三:配置好第二步中的xml文件信息,启动服务便集成成功。
方式二、Spring Boot集成CAS
步骤一:maven 文件中添加CAS坐标,引入依赖
在
pom.xml中的标签内添加如下配置
<!--cas依赖包-->
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.3.0-GA</version>
</dependency>步骤二:Spring Boot配置文件中添加CAS配置代码块
在
application.yml文件中添加如下配置
cas:
#客户端地址
client-host-url: http://10.10.10.28:8088
#服务登录地址
server-login-url: http://10.10.10.103:8014/login
#服务登录前缀
server-url-prefix: http://10.10.10.103:8014
#使用session
use-session: true
#cas验证方式1、CAS;2、CAS3;3、SAML
validation-type: cas3步骤三:编写CAS控制配置类
在Spring Boot项目中编写配置类
@Configuration
public class CASAutoConfig {
@Value("${cas.server-login-url}")
private String serverLoginUrl;
@Value("${cas.client-host-url}")
private String clientHostUrl;
/**
* 授权过滤器
* @return
*/
@Bean
public FilterRegistrationBean<AuthenticationFilter> filterAuthenticationRegistration() {
FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<AuthenticationFilter>();
registration.setFilter(new AuthenticationFilter());
// 设定匹配的路径
registration.addUrlPatterns("/*");
Map<String, String> initParameters = new HashMap<String, String>();
initParameters.put("casServerLoginUrl", serverLoginUrl);
initParameters.put("serverName", clientHostUrl);
// 忽略的url,"|"分隔多个url
initParameters.put("ignorePattern", "/logout/success|/index");
registration.setInitParameters(initParameters);
// 设定加载的顺序
registration.setOrder(1);
return registration;
}
}步骤四:配置好后,启动项目便配置成功
- 获取用户信息说明
// 单纯获取用户名
request.getRemoteUser();
// 如果要获取用户的更多信息,用如下方法:
Assertion assertion = AssertionHolder.getAssertion();
// 获取AttributePrincipal对象,这是客户端对象
AttributePrincipal ap = assertion.getPrincipal();
String name = ap.getName();
// 获取更多用户属性
Map att = ap.getAttributes();JAVA客户端配置证书说明
- 需要cas服务端提供证书
- 客户端导入证书
如果服务端是https,客户端需要导入证书。
#生成cer证书:
keytool -export -alias casstore -storepass changeit -file casserver.cer -keystore server.keystore
#jdk导入证书:
#生成的服务器的证书casserver.cer导入到jdk/lib/security/cacerts密钥库文件中
keytool -import -trustcacerts -alias casserver -storepass changeit -file casserver.cer –keystore cacerts