CAS认证demo示例
一、java版实现
1、RG-SourceID说明:
接入前请确保已在SourceID中开通相关应用及权限(登录、登出、获取用户权限)
2、环境要求
JDK >=1.6
开发语言:JAVA
3、CAS验证原理说明
1-2、用户第一次请求时,CAS客户端拦截请求并重定向到CAS服务端(SourceID)。
3-4、(用户输入密码,服务器校验)CAS服务端生成cookie写入浏览器,同时缓存到服务器本地,并且生成ticket保存到服务器,也会加在url后面重定向会CAS客户端。
5、CAS客户端拿到ticket之后通过调用服务端的serviceValidate接口校验ticket的合法性。
6、返回用户信息。
4、对接步骤(spring版本):
可以参考cas-demo-spring
4.1、引入cas客户端的支持
在pom.xml文件引入依赖
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.5.0</version>
</dependency>
4.2、web.xml文件
注意:只需将下方的https://sid.rghall.com.cn和http://ip:port根据实际做修改即可
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- ========================单点登录开始 ======================== -->
<!-- 登出过滤器:SingleSignOutFilter需要配置在所有Filter之前,当Cas Client通过Cas Server登录成功,Cas Server会携带生成的Service Ticket回调Cas Client,此时SingleSignOutFilter会将Service Ticket与当前的Session绑定在一起。当Cas Server在进行logout后回调Cas Client应用时也会携带该Service Ticket,此时Cas Client配置的SingleSignOutFilter将会使对应的Session失效,进而达到登出的目的。 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<!-- ===== 此处的https://sid.rghall.com.cn需修改 !!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!!!!!!!! -->
<param-value>https://sid.rghall.com.cn</param-value>
</init-param>
</filter>
<!-- 登出监听器:SingleSignOutHttpSessionListener用于在Cas Client应用中的Session过期时将其从对应的映射关系中移除。 -->
<listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 登录过滤器:当访问系统受保护的资源时,cas的过滤器AuthenticationFilter会对它进行拦截,发现用户没有登录(系统中没有对应的session信息),就会跳转到统一登录页面。否则调用FilterChain中下一个Filter。 -->
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<!-- 使用的CAS-Server的登录地址,一定是到登录的action -->
<!-- ===== 此处的https://sid.rghall.com.cn/login需修改 !!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!!!!!!!! -->
<param-value>https://sid.rghall.com.cn/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<!-- 当前Client系统的地址 -->
<!-- ===== 此处的http://ip:port需修改 !!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!!!!!!!! -->
<param-value>http://ip:port</param-value>
</init-param>
</filter>
<!-- 该过滤器负责对Ticket的校验工作 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<!--开启Saml校验类型,只需将下面注释去掉就行-->
<!--<filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class>-->
<!--开启CAS2校验类型,只需将下面注释去掉就行-->
<!--<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>-->
<!--开启CAS3-->
<filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<!-- 使用的CAS-Server的地址,一定是在浏览器输入该地址能正常打开CAS-Server的根地址 -->
<!-- ===== 此处的https://sid.rghall.com.cn需修改 !!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!!!!!!!! -->
<param-value>https://sid.rghall.com.cn</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<!-- 当前Client系统的地址 -->
<!-- ===== 此处的http://ip:port需修改 !!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!!!!!!!! -->
<param-value>http://ip:port</param-value>
</init-param>
</filter>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<!-- 将Assertion绑定到ThreadLocal。该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder
来获取用户的登录名。比如AssertionHolder.getAssertion().getPrincipal().getName()
或者request.getUserPrincipal().getName()-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<!—CAS单点配置结束-->
<!-- 配置springmvc的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 设置spring 的配置信息 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring.xml</param-value>
</context-param>
<!--指定请求或者响应的编码格式-->
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置springmvc -->
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>spring mvc 配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--以下为各个过滤器的映射地址-->
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
4.3、登录
先通过获取AttributePrincipal对象,然后获取服务端返回的参数集合以及登录名。
//登录接口
@RequestMapping("login")
@ResponseBody
public String test1(HttpServletRequest request, HttpServletResponse response){
//从请求域中获取AttributePrincipal对象
AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();$\color{red}{红色字}$
//获取服务端传递过来的参数
Map<String, Object> attributes = principal.getAttributes();
if(attributes !=null && attributes.size() >0){
Set<Map.Entry<String, Object>> entries = attributes.entrySet();
entries.forEach(item ->{
System.out.println(item.getKey() + "-----" + item.getValue());
});
System.out.println("--------------");
}
//获取登录用户名
//String loginName1 = request.getRemoteUser();
String loginName1 = principal.getName();
//获取Cas服务端返回的自定义数据
Object IDCARD = attributes.get("IDCARD");
Object XB = attributes.get("XB");
Object XM = attributes.get("XM");
Object TEL = attributes.get("TEL");
StringBuilder builder = new StringBuilder();
builder.append("身份证:").append(IDCARD)
.append("性别:").append(XB)
.append("姓名:").append(XM)
.append("电话:").append(TEL)
.append("登录名:").append(loginName1);
return "login success ---->" + builder.toString();
}
获取CAS服务端返回参数:登录成功之后可以通过request域中获取CAS服务端返回的参数
//获取Cas服务端返回的自定义数据
Object IDCARD = attributes.get("IDCARD");
Object XB = attributes.get("XB");
Object XM = attributes.get("XM");
Object TEL = attributes.get("TEL");
4.4、登出
登出操作:先将session置为无效,然后重定向到CAS服务端的登出地址,当CAS服务端登出成功之后回调service后面的地址。
//登出接口
@RequestMapping("logout")
public String logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
HttpSession session = request.getSession();
//将session置为无效
session.invalidate();
//重定向到CAS服务端,退出成功之后CAS服务端重定向到service后面的地址,不写service的值,则默认跳转到CAS服务端指定的页面
return "redirect:"+"https://sso.rghall.com.cn/logout"+"?service=" + "http://ip:port" + "/login";
}
4.5、测试
在浏览器上输入:http://ip:port/login
输入账号密码即可跳转到下面页面
登录成功之后,可以查看打印的参数日志
登出,在浏览器上输入: http://ip:port/logout之后,又跳转到登录页面
5、注意事项
5.1、cas2.0和cas3.0的配置
启动cas2.0:在web.xml指定CAS Validation Filter过滤器为
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
启动cas3.0:在web.xml中指定CAS Validation Filter过滤器为
org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
单域名部署需要将单点登录地址从 https://sso.xxx.edu.cn/login 修改为 https://sso.xxx.edu.cn/cas才可以正常对接成功
cas对接springboot版本 需要配置客户端地址: 如 cas.client-host-url=http://xxx.xxx.xxx
6、附件
二、.net版实现
1、RG-SourceID说明:
接入前请确保已在SourceID中开通相关应用及权限(登录、登出、获取用户权限)
2、环境要求
开发集成环境:VS2012 .NET4.5及以上版本
开发语言:C#
3、CAS验证原理说明
1-2、用户第一次请求时,CAS客户端拦截请求并重定向到CAS服务端(SourceID)。
3-4、(用户输入密码,服务器校验)CAS服务端生成cookie写入浏览器,同时缓存到服务器本地,并且生成ticket保存到服务器,也会加在url后面重定向会CAS客户端。
5、CAS客户端拿到ticket之后通过调用服务端的serviceValidate接口校验ticket的合法性。
6、返回用户信息。
4、对接步骤(net版本):
可以参考net-cas-demo
4.1、引入cas客户端的支持,添加dll引用
4.2、web.config文件
<?xml version="1.0"?>
<!--站点配置文件信息,配置信息都按照如下即可,都是必填项,尽量不要少配置信息-->
<configuration>
<!--DotNet版本的cas客户端配置节点文件信息,标准化处理即可-->
<configSections>
<section name="casClientConfig" type="DotNetCasClient.Configuration.CasClientConfiguration, DotNetCasClient"/>
</configSections>
<!--具体的casClient配置信息,如:casServerLoginUrl为cas服务器登录页面地址 casServerUrlPrefix服务器前缀地址 serverName当前应用地址 notAuthorizedUrl 未验证页面 cookiesRequiredUrl未获取cookie提示页面-->
<!--redirectAfterValidation 验证后是否重定向 gateway 网关 renew 重建 singleSignOut 单向登出 ticketTimeTolerance 超时时间 ticketValidatorName cas名称 proxyTicketManager 代理器 serviceTicketManager 代理缓存服务 gatewayStatusCookieName 代理网关状态,都保持默认,不变即可 -->
<casClientConfig
casServerLoginUrl="http://sid.rghall.com.cn/login" //对应服务器地址CAS登录表单的URL
casServerUrlPrefix=" http://sid.rghall.com.cn/p3" //对应服务器地址前缀指向CAS服务器应用程序根目录的URL
特别注意:目前net只支持开通cas3.0的才能获取用户信息相关的attributes字段,所以在web.config文件里配置要配置/p3,在配置url中指的是开通cas3.0对接。
serverName=http://localhost:3273 //应用地址
notAuthorizedUrl="~/NotAuthorized.aspx"//未验证页面
cookiesRequiredUrl="~/CookiesRequired.aspx"// cookiesRequiredUrl未获取cookie提示页面
redirectAfterValidation="true"//验证后是否重定向
gateway="false"//网关启用CAS网关功能
renew="false"//重建没有
|“续订”强制用户在访问此应用程序之前重新验证CAS
singleSignOut="true"//单向登出配置允许此应用程序在用户的SSO会话结束时接收发送的CAS single signout消息。这将导致此应用程序中的用户会话被销毁
ticketTimeTolerance="5000" ///超时时间
ticketValidatorName="Cas20"//名称使用特定协议验证CAS票证的票证验证程序的名称。有效值为“Cas10、Cas20 Cas30和Saml11”
proxyTicketManager="CacheProxyTicketManager"///代理器 serviceTicketManager
serviceTicketManager="CacheServiceTicketManager"//代理缓存服务
gatewayStatusCookieName="CasGatewayStatus" />//代理网关状态,都保持默认,不变即可
<system.web>
<!--Asp.NET MVC用System.Web自带方法写入FormsAuthentication验证-->
<authentication mode="Forms">
<!--详细信息为cas地址 页面 使用cookie 超时时间-->
<forms
loginUrl="http://sid.rghall.com.cn/login"
timeout="90"
defaultUrl="~/Default.aspx"
cookieless="UseCookies"
slidingExpiration="true"
/>
</authentication>
<compilation debug="true">
</compilation>
<!-- IIS7.0经典模式或者IIS之前版本 -->
<httpModules>
<add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
</httpModules>
</system.web>
<!--Asp.NET MVC用System.Web自带方法写入FormsAuthentication验证-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="DotNetCasClient"/>
<add name="DotNetCasClient" type="DotNetCasClient.CasAuthenticationModule,DotNetCasClient"/>
</modules>
</system.webServer>
</configuration>
配置如下:
4.3、登录
右键选择Default.aspx,“在浏览器中运行”,会显示如下页面,点击“测试CAS登录”,然后页面会跳转到CAS服务认证中心登录页面,
输入用户名和密码,进行CAS单点登录,代码实现如下:点击按钮,页面会进行跳转
//登录时通过配置的Forms认证,读取cas服务器的证书服务,是否写入了cookie,读取cookie信息
HttpCookie ticketCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (ticketCookie != null)//如果cookie不为空
{
if (!string.IsNullOrEmpty(ticketCookie.Value)) //如果有值
{
// FormsAuthenticationTicket基于forms的验证
构建基于forms的验证机制过程如下:
1,设置IIS为可匿名访问和asp.net web.config中设置为form验证
2,检索数据存储验证用户,并检索角色(如果不是基于角色可不用)
3,使用FormsAuthenticationTicket创建一个Cookie并回发到客户端,并存储
角色到票据中,如:
FormsAuthentication.SetAuthCookie(Username,true | false)
cookies保存时间:
HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName].Expires=DateTime.Now.AddDays(1)
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(ticketCookie.Value);// //将加密后的票据保存为cookie
if (CasAuthentication.ServiceTicketManager != null)
{
CasAuthenticationTicket casTicket = CasAuthentication.ServiceTicketManager.GetTicket(ticket.UserData);
if (casTicket != null)
{
//从cookie中读取姓名和角色等信息
CasNetId.Text = casTicket.NetId;
CasServiceTicket.Text = casTicket.ServiceTicket;
CasOriginatingServiceName.Text = casTicket.OriginatingServiceName;
CasClientHostAddress.Text = casTicket.ClientHostAddress;
CasValidFromDate.Text = casTicket.ValidFromDate.ToString();
CasValidUntilDate.Text = casTicket.ValidUntilDate.ToString();
}
}
}
}
登录成功:会返回到本地应用页面,然后携带相应的ticket证书信息
4.4、获取返回参数
之前发现通过该方法,测试了很多版本均无法取到用户信息,原因在于.NET cas2.0不支持获取,官方的casClient的源码是有坑的,主要原因是java实现的attributes的属性,.net在解析的时候,是不能自动感知attributes属性字段,需要修改代码来实现对属性字段的解析,具体如下,改造两个地方:
1. 改造第一部分,文件具体位置如下:
cas-demo\DotNetCasClient\Validation\Schema\Cas20\AuthenticationSuccess.cs
具体更改如下图:该文件需要增加对要解析的字段进行attributes的字段进行承接。目前我们增加了GH属性,这样在认证后,就可以直接获取GH属性。如果需要解析其他属性,则对应的在文件中添加其他属性字段的解析定义.
2. 改造第二部分,就是在Ticket解析中,增加对获取信息的解析。改造文件位置: cas-demo\DotNetCasClient\Validation\TicketValidator\Cas20ServiceTicketValidator.cs
从131行以后,增加对用户的属性字段解析,然后增加如下解析信息:
这个时候回到default页面,就可以通 httpcontext.current.user获取用户信息了:
var user = HttpContext.Current.User;
var casPrincipal = (ICasPrincipal)user;
var dict= casPrincipal.Assertion.Attributes;
从而得到用户信息,获取任何其他信息都通过此种方法,直接增加即可。
4.5、登出
登出操作:先将session置为无效,然后重定向到CAS服务端的登出地址,当CAS服务端登出成功之后回调service后面的地址。具体方法:访问地址http://localhost:3273/ExampleWebSite/Loginout.aspx
//循环调用Cookie集合,如果找到相应的cas存储加密值,清除
for (int i = 0; i < Request.Cookies.Count; i++)
{
if (Request.Cookies[i].Name == ".ASPXAUTH")
{
Request.Cookies[i].Expires = DateTime.Now.AddDays(-1);
Request.Cookies.Remove(".ASPXAUTH");
}
}
//清除cookie后,重定向到cas地址进行认证,获取相关认证信息 Response.Redirect("http://120.79.32.25:8050/cas/login?service=http://localhost:3273/ExampleWebSite/Default.aspx");
4.6、测试
在浏览器上输入:http://ip:port/Default.aspx 本地应用主页面,点击“测试CAS登录”
输入账号密码即可跳转到下面页面
登录成功之后,页显示了获取成功之后的参数
登出,在浏览器上输入:http://localhost:3273/ExampleWebSite/Loginout.aspx之后,又跳转到登录页面
5、注意事项
5.1、cas2.0和cas3.0的配置
启动cas2.0:下载casClient dotnet版本源码即可
启动cas3.0:需要对casClient dotnet版本源码进行改造
备注:在程序中提供相关的dll,直接支持cas2.0和cas3.0版本,但是必须在配置文件中配置,指明当前是哪个版本:即对应如下:
cas2.0:casServerUrlPrefix="https://sid.rghall.com.cn"
cas3.0:casServerUrlPrefix="https://sid.rghall.com.cn/p3"
6、附件
三、php版实现
1、RG-SourceID说明:
接入前请确保已在SourceID中开通相关应用及权限(登录、登出、获取用户权限)
2、环境要求
开发语言:PHP
PHP版本 >= 5.4(支持curl,openssl,dom,zlib,gettext,imap,kerberos,mysql)
3、CAS验证原理说明
1-2、用户第一次请求时,CAS客户端拦截请求并重定向到CAS服务端(SourceID)。
3-4、(用户输入密码,服务器校验)CAS服务端生成cookie写入浏览器,同时缓存到服务器本地,并且生成ticket保存到服务器,也会加在url后面重定向会CAS客户端。
5、CAS客户端拿到ticket之后通过调用服务端的serviceValidate接口校验ticket的合法性。
6、返回用户信息。
4、对接步骤:
可以参考php demo
4.1、将PHP客户端引入应用项目
方式一:composer安装CAS客户端
1:使用PHP管理依赖(dependency)关系的工具安装CAS客户端(如未安装composer,请参考网站:https://www.phpcomposer.com 进行安装)
2:打开应用项目根目录,执行安装PHPCAS客户端命令:composer require jasig/phpcas
方式二:直接下载demo
1:下载demo.rar文件,解压目录,并将demo/vendor 目录拷贝到应用程序根目录
4.2、登录(参考demo/login.php)
第一步:新建登录PHP文件或方法
<?php
/**
* 引用CAS客户端类(注:请根据您的应用程序框架选择正确的引用方式)
*/
require_once dirname(__FILE__).'/vendor/jasig/phpcas/source/CAS.php';
/**
* CAS服务端配置
*/
//CAS服务端连接地址(注:根据SourceID平台提供的地址修改,需要修改)
$cas_host = 'sid.rghall.com.cn';
//CAS服务端连接路径
$cas_context = '';(注:根据SourceID平台提供的路径修改(例如:服务端登录地址为https://域名/cas,路径就为cas),默认为空)
//CAS服务端连接端口
$cas_port = 443; (注:根据SourceID平台提供的端口修改,需要修改)
/**
* 连接远程CAS客户端(支持协议CAS2.0,CAS3.0)
*/
//开启调试模式(false为关闭)
phpCAS::setDebug();
//CAS2.0连接服务端CAS
//phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_port, $cas_context);
//CAS3.0连接服务端CAS(建议使用)
phpCAS::client(CAS_VERSION_3_0, $cas_host, $cas_port, $cas_context);
/**
* 不对CAS服务器设置SSL验证,正式环境建议注释
*/
phpCAS::setNoCasServerValidation();
/**
* 如果用户还没有登录,则调用此方法以强制进行身份验证
* 校验Ticket合法性
*/
phpCAS::forceAuthentication();
/**
* 检查用户是否登录
*/
if(phpCAS::checkAuthentication()){
//获取登陆的用户名
$username = phpCAS::getUser();
//CAS客户端传来的部分参数
//$single_info = phpCAS::getAttribute('key');
//CAS客户端传来的全部参数
$all_info = phpCAS::getAttributes();
//处理应用程序对应的业务逻辑
setcookie('username',$username);
//打印用户信息
$all_info['username'] = '登录用户'.$username;
echo json_encode($all_info);
}
4.3、登出(参考demo/login.php)
<?php
/**
* 引用CAS客户端类(注:请根据您的应用程序框架选择正确的引用方式)
*/
require_once dirname(__FILE__).'/vendor/jasig/phpcas/source/CAS.php';
**
* CAS服务端配置
*/
//CAS服务端连接地址(注:根据SourceID平台提供的地址修改,需要修改)
$cas_host = 'sid.rghall.com.cn';
//CAS服务端连接路径
$cas_context = '';(注:根据SourceID平台提供的路径修改(例如:服务端登录地址为https://域名/cas,路径就为cas),默认为空)
//CAS服务端连接端口
$cas_port = 443; (注:根据SourceID平台提供的端口修改,需要修改)
/**
* 连接远程CAS客户端(支持协议CAS2.0,CAS3.0)
*/
//开启调试模式(false为关闭)
phpCAS::setDebug();
//CAS2.0连接服务端CAS
//phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_port, $cas_context);
//CAS3.0连接服务端CAS(建议使用)
phpCAS::client(CAS_VERSION_3_0, $cas_host, $cas_port, $cas_context);
/**
* 通知CAS服务器登出
*/
//跳转到CAS服务器端退出页面
phpCAS::logout();
//登出后跳转到指定的url
//phpCAS::logoutWithRedirectService($_SERVER['HTTP_HOST']);
4.4、测试
以demo为例:
1,将demo整个目录作为根目录放入php web环境中,运行php环境
2,网站访问 http://域名/login.php,如果跳转到如下图所示,说明你已成功实现登录连接了
3,使用SourceID提供的身份验证账号与密码进行登录,登录跳转到下图所示,说明你已完成登录测试,并获取了用户数据
4,登出,在浏览器上输入: http://域名/login.php之后,又跳转到登录页面(至此测试完毕)