统一身份认证对接文档
2023年1月13日大约 7 分钟
统一身份认证对接文档
引言
平台统一身份认证服务核心是CAS(Central Authentication Service)认证,当前CAS Server是基于开源框架CAS 6.3.1开发集成。支持CAS、SAML、OPENID、OAuth2.0等协议,支持JAVA、.NET、PHP等多个平台产品的CAS客户端对接,支持服务属性控制等。
编写目的
本文提供了JAVA、PHP、ASP.NET开发语言客户端CAS对接DEMO实例,并提供相应客户端集成CAS步骤,如客户端语言版本本文档未能涉及,请参照https://apereo.github.io/cas/6.3.x/planning/Architecture.html。
准备工作
三方网站应用登录基于Cas协议标准构建的统一认证登录系统。在进行统一认证授权登录之前,需在平台中创建对应第三方应用(需准备待对接应用服务地址,例如:http://10.10.10.29:8080),并拥有该应用权限,并获取统一认证平台地址(联系部署实施人员),可开始接入流程。
参考实例Demo
JAVA客户端-基于XML集成CAS
第一步:拷贝客户端包
将cas-client-core-3.5.1.jar拷贝到webContent/WEB-INF/lib目录下。
第二步:修改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>
<!--认证过滤器配置结束-->第三步:将配置中标识“修改”的部分,按照说明修改正确。
第四步:如当前应用已审核通过,可通过浏览器请求应用地址进行访问。
获取用户详细信息接口
request.getRemoteUser(); //单纯获取用户名
//如果要获取用户的更多信息,用如下方法:
Assertion assertion = AssertionHolder.getAssertion();
AttributePrincipal ap = assertion.getPrincipal();
//获取AttributePrincipal对象,这是客户端对象
String name = ap.getName();
Map att = ap.getAttributes(); //获取更多用户属性JAVA客户端-基于Spring Boot集成CAS
第一步:配置pom.xml
<!-cas依赖包->
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.3.0-GA</version>
</dependency>第二步:配置application.yml
#客户端地址
client-host-url: http://10.10.10.29:8088
#服务登录地址
server-login-url: http://10.10.10.103:8014/cas/login
#服务登录前缀
server-url-prefix: http://10.10.10.103:8014/cas
#使用session
use-session: true
#cas验证方式1、CAS;2、CAS3;3、SAML
validation-type: cas3第三步:编写cas客户端控制类
import org.jasig.cas.client.authentication.AuthenticationFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class CASAutoConfig {
@Value("${cas.server-url-prefix}")
private String serverUrlPrefix;
@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", serverUrlPrefix);
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 ap = assertion.getPrincipal();
//获取AttributePrincipal对象,这是客户端对象
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 cacertsPHP客户端-集成CAS
第一步:文件拷贝
将phpcas包下CAS和CAS.PHP拷贝到工程根目录,具体参考php客户端对接demo。
第二步:修改配置config.php
#认证服务端地址
$cas_host = '10.10.10.103'
#cas服务端上下文
$cas_context = '/cas';
#cas服务端端口
$cas_port = 8014;
#cas客户端地址
$client_domain = '127.0.0.1';
#cas客户端上下文
$client_path = 'phpcas';第三步:index.php内容说明
// 加载设置的配置文件
require_once 'config.php';
// 加载cas依赖包
require_once './CAS.php';
// 打印日志
phpCAS::setLogger();
// 设置cas debug 和日志输出路径
phpCAS::setVerbose(true);
// 初始化客户端
phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_port, $cas_context);
//不使用SSL服务校验
phpCAS::setNoCasServerValidation();
//认证
phpCAS::forceAuthentication();
//退出
if (isset($_REQUEST\['logout'\])) \{
phpCAS::logout();
}PHP 配置证书(非必须)
- 需要cas服务端提供证书;
- 如果服务端是https协议,使用phpcas-https版本demo;
- 在config.PHP中配置证书。
$cas_server_ca_cert_path = '/path/to/cachain.pem';ASP.NET客户端-集成CAS
第一步:拷贝dll
根据net版本添加dll,添加到工程bin目录中。
DotNetCasClient.dll
DotNetCasClient.pdb
DotNetCasClient.xml
第二步:修改Web.config
- 注册 casClientConfig 部分;
<configSections>
<section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient"/>
</configSections><casClientConfig>配置元素直接放在根<configuration>元素下。<casClientConfig>元素在 web.config 文件中的位置并不重要;
参数说明:
- casServerLoginUrl - 必填。cas server 登录地址
- casServerUrlPrefix - 必填。cas server 登录前缀
- serverName - 必填。当前客户端地址
- notAuthorizedUrl - 可选参数。当请求具有有效的 CAS 票证但用户无权访问 URL 或资源时重定向到的 URL。如果设置了此选项,用户将被重定向到此 URL。如果未设置,用户将被重定向到 CAS 登录屏幕,URL 中包含一个更新选项(强制收集备用凭据)
- cookiesRequiredUrl - 可选。当客户端不接受会话 cookie 时重定向到的 URL。仅当启用网关时才会检测到这种情况。这会将用户锁定在特定页面上。否则,每个请求都会导致到 CAS 服务器的静默往返,向 URL 添加一个参数
- renew - 可选。启用 CAS 网关功能
- singleSignOut - 可选。使该应用程序能够在用户的 SSO 会话结束时接收发送的 CAS 单点注销消息。这将导致此应用程序中的用户会话被破坏。默认为true
- ticketValidatorName - 必填。票据验证器名称,有效值为Cas10、Cas20和Saml11
- serviceTicketManager - 必填。用于存储 CAS 服务器返回的票证的服务票证管理器,以进行验证、撤销和单点注销支持。如果没有配置工单管理器,这些功能将被禁用。有效值为CacheTicketManager、CacheServiceTicketManager
<casClientConfig casServerLoginUrl=http://10.10.10.103:8014/cas/login
casServerUrlPrefix=http://10.10.10.103:8014/cas/
serverName=http://10.10.10.29:63937
notAuthorizedUrl="~/NotAuthorized.aspx"
cookiesRequiredUrl="~/CookiesRequired.aspx"
redirectAfterValidation="true"
renew="false"
singleSignOut="true"
ticketValidatorName="Cas20"
serviceTicketManager="CacheServiceTicketManager" />- 通过将CasAuthenticationModule 添加到
<system.web><httpModules>和<system.webServer><modules>部分,向 ASP.NET 管道注册 CasAuthenticationModule
3.1. 注册 httpModules 部分:
<system.web>
<!--其他部分 -->
<httpModules>
<add name="DotNetCasClient"
type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
<!--其他部分 -->
</httpModules>
</system.web>- 注册模块部分:
<system.webServer>
<!--已禁用集成模式配置验证。这将允许在IIS 5/6和7上运行单个部署没有错误-->
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<!-- IIS7+ 先移除后添加,IIS5/6没有影响-->
<remove name="DotNetCasClient"/>
<add name="DotNetCasClient"
type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
</modules>
</system.webServer>- 配置ASP.NET表单身份验证,配置ASP.NET窗体身份验证部分
<forms>,使其指向在 casClientConfig 部分的casServerLoginUrl属性中定义的 CAS 服务器的登录 URL 。CAS 登录 URL 在两个位置相同是非常重要的。
参数说明:
- loginUrl - 必填。cas server登录地址
- timeout - 必填。cas server登录失效时间,分钟
- defaultUrl - 必填。—当前系统登录地址
- path - 如果存在重定向次数过多,去掉path
<system.web>
<authentication mode="Forms">
<forms
loginUrl="https://server.example.com/cas/login"
timeout="30"
defaultUrl="~/Default.aspx"
cookieless="UseCookies"
slidingExpiration="true"
path="/ApplicationName/" />
</authentication>
<!--如果存在配置不生效,禁止匿名登录-->
<authorization>
<deny users="?" />
</authorization>
<!--解决重定向次数过多-->
<sessionState mode="StateServer" cookieless="UseCookies" timeout="3600"></sessionState>
</system.web>ASP.NET配置证书(非必须)
- 需要cas服务端提供证书;
- Web托管程序上配置相应证书;
