<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CAS 教程 &#8211; FoxDevelop</title>
	<atom:link href="https://www.foxdevelop.com/zh/category/c-zh/cas-%e6%95%99%e7%a8%8b/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.foxdevelop.com</link>
	<description>独立软件开发工作室</description>
	<lastBuildDate>Thu, 06 Aug 2026 07:41:18 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://www.foxdevelop.com/wp-content/uploads/2026/05/fox-svgrepo-com-1.png</url>
	<title>CAS 教程 &#8211; FoxDevelop</title>
	<link>https://www.foxdevelop.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>CAS的实现</title>
		<link>https://www.foxdevelop.com/zh/2026/08/03/cas%e7%9a%84%e5%ae%9e%e7%8e%b0/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/03/cas%e7%9a%84%e5%ae%9e%e7%8e%b0/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Mon, 03 Aug 2026 01:03:57 +0000</pubDate>
				<category><![CDATA[CAS 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7246</guid>

					<description><![CDATA[旧版本的CAS实现思路 核心原理（CAS 1.0 协议） w ...]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">旧版本的CAS实现思路</p>



<h4 class="wp-block-heading">核心原理（CAS 1.0 协议）</h4>



<ol class="wp-block-list">
<li>用户访问受保护页面 <code>/admin/admin.aspx</code></li>



<li><code>web.config</code> 权限配置拦截匿名用户，自动跳转登录页 <code>CasEnter.aspx</code></li>



<li><code>CasEnter.aspx</code> 判断URL有无 <code>ticket</code> 参数</li>
</ol>



<ul class="wp-block-list">
<li>无ticket：重定向到CAS服务端登录地址，并传入当前站点地址 <code>service</code></li>



<li>携带ticket：调用 <code>serviceValidate</code>接口向CAS服务器校验票据</li>
</ul>



<ol class="wp-block-list">
<li>CAS返回XML，解析出登录用户名</li>



<li>校验成功后调用 <code>FormsAuthentication.SetAuthCookie()</code> 写入本地Forms登录票据，跳转目标页面</li>



<li>后续访问受保护目录，由ASP.NET Forms身份识别登录状态</li>
</ol>



<h4 class="wp-block-heading">web.config 配置</h4>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">system.web</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">authentication</span> <span class="hljs-attr">mode</span>=<span class="hljs-string">"Forms"</span>&gt;</span>
    <span class="hljs-comment">&lt;!-- loginUrl指向CasEnter.aspx 作为CAS入口中转页 --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">forms</span> <span class="hljs-attr">loginUrl</span>=<span class="hljs-string">"CasEnter.aspx"</span> 
           <span class="hljs-attr">defaultUrl</span>=<span class="hljs-string">"admin/admin.aspx"</span> 
           <span class="hljs-attr">name</span>=<span class="hljs-string">".LoginFormsTicket"</span> 
           <span class="hljs-attr">path</span>=<span class="hljs-string">"/"</span> 
           <span class="hljs-attr">timeout</span>=<span class="hljs-string">"40"</span> 
           <span class="hljs-attr">protection</span>=<span class="hljs-string">"All"</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">forms</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">authentication</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">authorization</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">allow</span> <span class="hljs-attr">users</span>=<span class="hljs-string">"*"</span>/&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">authorization</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">system.web</span>&gt;</span>

<span class="hljs-comment">&lt;!-- 限制admin目录禁止匿名访问 --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">location</span> <span class="hljs-attr">path</span>=<span class="hljs-string">"admin"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">system.web</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">authorization</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">deny</span> <span class="hljs-attr">users</span>=<span class="hljs-string">"?"</span>/&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">authorization</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">system.web</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">location</span>&gt;</span></code></span></pre>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">新版CAS服务端默认强制HTTPS，<code>casUrl</code> 必须填写 <code>https://127.0.0.1:8443/cas/</code></p>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">appSettings</span>&gt;</span>
  <span class="hljs-comment">&lt;!-- 新版CAS7地址，末尾带斜杠 --&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">add</span> <span class="hljs-attr">key</span>=<span class="hljs-string">"casUrl"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"https://127.0.0.1:8443/cas/"</span>/&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">appSettings</span>&gt;</span></code></span></pre>


<h4 class="wp-block-heading">CasEnter.aspx 页面代码</h4>



<h5 class="wp-block-heading">1. CasEnter.aspx 前端</h5>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">%@</span> <span class="hljs-attr">Page</span> <span class="hljs-attr">Language</span>=<span class="hljs-string">"C#"</span> <span class="hljs-attr">AutoEventWireup</span>=<span class="hljs-string">"true"</span> <span class="hljs-attr">CodeBehind</span>=<span class="hljs-string">"CasEnter.aspx.cs"</span> <span class="hljs-attr">Inherits</span>=<span class="hljs-string">"CasStudy.Web.CasEnter"</span> %&gt;</span>
<span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">html</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://www.w3.org/1999/xhtml"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span> <span class="hljs-attr">runat</span>=<span class="hljs-string">"server"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>CAS中转登录<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">form</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"form1"</span> <span class="hljs-attr">runat</span>=<span class="hljs-string">"server"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">asp:Label</span> <span class="hljs-attr">ID</span>=<span class="hljs-string">"Label1"</span> <span class="hljs-attr">runat</span>=<span class="hljs-string">"server"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">asp:Label</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">br</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">asp:HyperLink</span> <span class="hljs-attr">ID</span>=<span class="hljs-string">"HyperLink1"</span> <span class="hljs-attr">runat</span>=<span class="hljs-string">"server"</span>&gt;</span>重新认证<span class="hljs-tag">&lt;/<span class="hljs-name">asp:HyperLink</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">form</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span></code></span></pre>


<h5 class="wp-block-heading">2. CasEnter.aspx.cs 后端</h5>



<p class="wp-block-paragraph"><br>接口升级为CAS3.0 <code>p3/serviceValidate</code><br>增加HttpClient替代废弃WebClient </p>



<p class="wp-block-paragraph">增加自签名证书兼容（本地测试新版CAS必备）<br>命名空间处理CAS返回XML命名空间</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">using System;
using System.Configuration;
using System.Net;
using System.Net.Http;
using System.Xml;
using System.Web.Security;

public partial class CasEnter : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string casHost = ConfigurationManager.AppSettings&#91;"casUrl"];
        string ticket = Request.QueryString&#91;"ticket"];
        string service = Request.Url.GetLeftPart(UriPartial.Path);

        // 没有票据，跳转CAS登录页
        if (string.IsNullOrEmpty(ticket))
        {
            string redirectUrl = $"{casHost}login?service={Uri.EscapeDataString(service)}";
            Response.Redirect(redirectUrl);
            return;
        }

        // 校验ticket
        string username = ValidateTicket(casHost, ticket, service);
        if (string.IsNullOrEmpty(username))
        {
            Label1.Text = "抱歉！CAS认证失败，请重试！";
            HyperLink1.NavigateUrl = Request.Url.AbsolutePath;
        }
        else
        {
            // 写入Forms身份票据，完成本地登录
            FormsAuthentication.SetAuthCookie(username, false);
            // 跳转到目标页面
            Response.Redirect(FormsAuthentication.DefaultUrl);
        }
    }

    /// <span class="hljs-tag">&lt;<span class="hljs-name">summary</span>&gt;</span>
    /// CAS3.0 p3/serviceValidate 票据校验
    /// <span class="hljs-tag">&lt;/<span class="hljs-name">summary</span>&gt;</span>
    private string ValidateTicket(string casHost, string ticket, string service)
    {
        // 新版CAS推荐使用 p3/serviceValidate（CAS3.0协议）
        string validateUrl = $"{casHost}p3/serviceValidate?ticket={Uri.EscapeDataString(ticket)}&amp;service={Uri.EscapeDataString(service)}";

        // 本地测试：允许不受信任SSL证书（生产环境删除这段！）
        ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, err) =&gt; true;

        using var httpClient = new HttpClient();
        string xml = httpClient.GetStringAsync(validateUrl).Result;

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);
        XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable);
        // CAS3返回xml命名空间
        nsMgr.AddNamespace("cas", "http://www.yale.edu/tp/cas");

        // 查找用户节点
        XmlNode userNode = doc.SelectSingleNode("//cas:authenticationSuccess/cas:user", nsMgr);
        return userNode?.InnerText;
    }
}</code></span></pre>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/03/cas%e7%9a%84%e5%ae%9e%e7%8e%b0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>安装</title>
		<link>https://www.foxdevelop.com/zh/2026/08/03/%e5%ae%89%e8%a3%85-2/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/03/%e5%ae%89%e8%a3%85-2/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Mon, 03 Aug 2026 00:51:59 +0000</pubDate>
				<category><![CDATA[CAS 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7241</guid>

					<description><![CDATA[旧版本安装-说明 CAS 5.0之前 依赖 1. JDK 版 ...]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">旧版本安装-说明 CAS 5.0之前</h3>



<ol class="wp-block-list">
<li>CAS服务端基于Java语言开发，运行依赖两个核心环境：</li>
</ol>



<ul class="wp-block-list">
<li><strong>JDK（Java开发工具包）</strong>：内置Java虚拟机(JVM)，用来执行Java程序，是运行基础。</li>



<li><strong>Tomcat（Web容器）</strong>：用来部署运行CAS的war网页程序。</li>
</ul>



<ol class="wp-block-list">
<li>安装顺序规范：<strong>先安装JDK → 再安装Tomcat</strong>（Tomcat安装时会自动寻找本机JDK环境）</li>
</ol>



<h4 class="wp-block-heading">依赖</h4>



<h5 class="wp-block-heading">1. JDK</h5>



<p class="wp-block-paragraph">版本：（JDK）Java 17<br>直链：<code><a href="https://www.oracle.com/cn/java/technologies/downloads/">Java Downloads | Oracle </a></code></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 注意：JDK7属于老旧版本，仅适配老版本CAS；新项目不推荐使用。</p>
</blockquote>



<h5 class="wp-block-heading">2. Apache Tomcat</h5>



<p class="wp-block-paragraph">版本：<strong>Tomcat （Windows安装版）</strong><br><a href="https://tomcat.apache.org/">Apache Tomcat® &#8211; Welcome!</a></p>



<h4 class="wp-block-heading">安装流程</h4>



<ol class="wp-block-list">
<li><strong>安装JDK</strong>
<ul class="wp-block-list">
<li>运行exe安装包，可自定义安装路径</li>



<li>【关键】安装完成后建议配置环境变量：<code>JAVA_HOME</code>、<code>Path</code>，方便Tomcat识别Java环境</li>
</ul>
</li>



<li><strong>安装Tomcat7</strong>
<ul class="wp-block-list">
<li>运行安装程序，安装过程中会自动扫描已安装好的JDK</li>



<li>可自定义Tomcat端口（默认8080）、设置管理账号密码</li>



<li>安装结束页面选项：</li>



<li> <code>Run Apache Tomcat</code>：勾选则点击Finish后自动启动Tomcat服务</li>



<li><code>Show Readme</code>：可取消勾选，不需要查看说明文档</li>



<li>点击<code>Finish</code>完成安装</li>
</ul>
</li>
</ol>



<h4 class="wp-block-heading">Tomcat配置SSL/HTTPS</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">核心背景：<strong>CAS协议强制要求服务端必须使用HTTPS</strong>，不能使用HTTP，所以必须为Tomcat配置SSL证书。</p>
</blockquote>



<ol class="wp-block-list">
<li>使用JDK自带 <code>keytool</code> 工具生成 <strong>JKS密钥库（自签名证书）</strong></li>



<li>修改Tomcat <code>conf/server.xml</code>，开启SSL连接器</li>



<li>重启Tomcat，访问 <code>https://localhost:8443</code> 验证HTTPS</li>
</ol>



<h4 class="wp-block-heading">生成自签名证书（JKS）</h4>



<h5 class="wp-block-heading">前置准备</h5>



<ol class="wp-block-list">
<li>创建证书存放目录：示例 <code>C:\Keys</code></li>



<li><strong>管理员身份运行 cmd</strong><br>&gt; Windows7/10/11 如果直接普通cmd写入C盘根目录，会权限不足报错。</li>



<li>进入JDK/JRE的bin目录</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-javascript">cd <span class="hljs-string">"c:\Program Files\Java\jre\bin"</span></code></span></pre>


<p class="wp-block-paragraph">通用模板命令（新版JDK同样适用）</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">keytool</span> <span class="hljs-selector-tag">-genkey</span> <span class="hljs-selector-tag">-alias</span> <span class="hljs-selector-tag">tomcat</span> <span class="hljs-selector-tag">-keyalg</span> <span class="hljs-selector-tag">RSA</span> <span class="hljs-selector-tag">-storepass</span> <span class="hljs-selector-tag">changeit</span> <span class="hljs-selector-tag">-keystore</span> <span class="hljs-selector-tag">c</span>:\<span class="hljs-selector-tag">Keys</span>\<span class="hljs-selector-class">.keystore</span> <span class="hljs-selector-tag">-validity</span> 36000</code></span></pre>


<h4 class="wp-block-heading">参数解释</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>参数</th><th>含义</th></tr></thead><tbody><tr><td><code>-genkey</code></td><td>生成密钥对</td></tr><tr><td><code>-alias tomcat</code></td><td>证书别名，自定义</td></tr><tr><td><code>-keyalg RSA</code></td><td>加密算法，标准RSA</td></tr><tr><td><code>-storepass changeit</code></td><td><strong>密钥库密码</strong>（务必记住，后面配置Tomcat要用）</td></tr><tr><td><code>-keystore c:\Keys\.keystore</code></td><td>证书文件输出路径</td></tr><tr><td><code>-validity 36000</code></td><td>证书有效期（天）</td></tr></tbody></table></figure>



<h5 class="wp-block-heading">交互填写信息</h5>



<p class="wp-block-paragraph">执行命令后依次录入：</p>



<ol class="wp-block-list">
<li>名字与姓氏：填写域名（学习环境随便填）</li>



<li>组织单位、组织、城市、省份、国家代码（cn）</li>



<li>确认信息输入 <code>y</code></li>



<li>密钥口令：<strong>直接回车，和密钥库密码保持一致</strong></li>
</ol>



<h5 class="wp-block-heading">查看证书命令</h5>


<pre class="wp-block-code"><span><code class="hljs language-php">keytool -<span class="hljs-keyword">list</span> -keystore <span class="hljs-string">"C:\Keys\.keystore"</span></code></span></pre>


<p class="wp-block-paragraph">输入密码，能正常输出信息代表证书生成成功。</p>



<h4 class="wp-block-heading">Tomcat server.xml 配置SSL连接器</h4>



<ol class="wp-block-list">
<li>打开 <code>Tomcat/conf/server.xml</code></li>



<li>找到被注释的SSL Connector，取消注释并修改证书路径、密码</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">Connector</span> <span class="hljs-attr">port</span>=<span class="hljs-string">"8443"</span> <span class="hljs-attr">protocol</span>=<span class="hljs-string">"HTTP/1.1"</span> <span class="hljs-attr">SSLEnabled</span>=<span class="hljs-string">"true"</span>
    <span class="hljs-attr">maxThreads</span>=<span class="hljs-string">"150"</span> <span class="hljs-attr">scheme</span>=<span class="hljs-string">"https"</span> <span class="hljs-attr">secure</span>=<span class="hljs-string">"true"</span>
    <span class="hljs-attr">clientAuth</span>=<span class="hljs-string">"false"</span> <span class="hljs-attr">sslProtocol</span>=<span class="hljs-string">"TLS"</span>
    <span class="hljs-attr">keystoreFile</span>=<span class="hljs-string">"C:\Keys\.keystore"</span>
    <span class="hljs-attr">keystorePass</span>=<span class="hljs-string">"changeit"</span> /&gt;</span></code></span></pre>


<h5 class="wp-block-heading">参数说明</h5>



<ul class="wp-block-list">
<li><code>port="8443"</code>：Tomcat默认HTTPS端口（标准HTTPS默认443，如需改成443要注意端口占用权限）</li>



<li><code>keystoreFile</code>：你生成的证书文件绝对路径</li>



<li><code>keystorePass</code>：上面keytool设置的密钥库密码</li>



<li><code>clientAuth="false"</code>：不需要客户端证书（学习环境固定false）</li>
</ul>



<h4 class="wp-block-heading">验证方式</h4>



<p class="wp-block-paragraph">启动Tomcat，浏览器访问：<br><code>https://127.0.0.1:8443</code></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">自签名证书浏览器会提示“不安全”，属于正常现象；生产环境需要购买正规CA证书。</p>
</blockquote>



<h3 class="wp-block-heading">CAS安装 5.0+</h3>



<h5 class="wp-block-heading">1、资源获取</h5>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">CAS 5.0+ 抛弃传统 <code>war + Tomcat</code> 模式，基于SpringBoot，<strong>独立可执行Jar，无需外置Tomcat</strong></p>
</blockquote>



<ol class="wp-block-list">
<li>CAS服务端（Server）</li>
</ol>



<p class="wp-block-paragraph"><strong>CAS Initializr 在线生成部署包</strong><br>https://casinitializr.apereo.org</p>



<h5 class="wp-block-heading">2、CAS服务端部署操作流程</h5>



<ol class="wp-block-list">
<li>打开 CAS Initializr</li>
</ol>



<ul class="wp-block-list">
<li>选择 CAS Version：<code>7.0.x</code>（稳定最新版）</li>



<li>勾选基础模块：<code>Core / Web / SSL</code></li>



<li>生成并下载 <code>cas.war</code>（或者直接生成独立 <code>cas.jar</code>）</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">两种打包模式任选其一：</p>



<ul class="wp-block-list">
<li>模式A（推荐）：<strong>Standalone（独立Jar）</strong>，内置Tomcat，开箱即用</li>



<li>模式B：传统War包，可部署至外置Tomcat（不推荐）</li>
</ul>
</blockquote>



<ol start="2" class="wp-block-list">
<li>以【独立Jar模式】部署（主流方案）<br>1）下载得到 <code>cas.jar</code><br>2）新建配置目录 <code>./etc/cas/config</code>，创建配置文件 <code>cas.properties</code><br>3）启动命令（Java17+ 必需环境）</li>
</ol>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">java</span> <span class="hljs-selector-tag">-jar</span> <span class="hljs-selector-tag">cas</span><span class="hljs-selector-class">.jar</span></code></span></pre>


<ol start="3" class="wp-block-list">
<li>端口与HTTPS说明<br>默认内置Tomcat端口：<strong>8443（HTTPS）</strong><br>新版本默认强制HTTPS，和旧版本规范保持一致。</li>
</ol>



<h5 class="wp-block-heading">3、访问地址</h5>


<pre class="wp-block-code"><span><code class="hljs language-javascript">https:<span class="hljs-comment">//127.0.0.1:8443/cas</span></code></span></pre>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/03/%e5%ae%89%e8%a3%85-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>介绍</title>
		<link>https://www.foxdevelop.com/zh/2026/08/03/%e4%bb%8b%e7%bb%8d-4/</link>
					<comments>https://www.foxdevelop.com/zh/2026/08/03/%e4%bb%8b%e7%bb%8d-4/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Mon, 03 Aug 2026 00:28:53 +0000</pubDate>
				<category><![CDATA[CAS 教程]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7238</guid>

					<description><![CDATA[概念 1. CAS CAS（Central Authenti ...]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">概念</h3>



<h4 class="wp-block-heading">1. CAS</h4>



<p class="wp-block-paragraph"><strong>CAS（Central Authentication Service，中央认证服务）</strong><br>耶鲁大学发起、开源的 <strong>Web SSO（单点登录）</strong> 实现框架。</p>



<h4 class="wp-block-heading">2. SSO（单点登录）</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">多个网站程序统一到唯一地址完成身份登录验证。</p>



<ul class="wp-block-list">
<li>特征：应用间基于Web协议（HTTPS）通信，<strong>全局唯一登录入口</strong></li>



<li>通俗理解：同一浏览器登录一次认证中心，访问所有信任站点无需重复登录</li>
</ul>
</blockquote>



<h4 class="wp-block-heading">3. SSO体系三大角色</h4>



<ol class="wp-block-list">
<li>User：终端用户（浏览器）</li>



<li>Web应用（多个业务系统）</li>



<li>SSO认证中心（唯一）</li>
</ol>



<h4 class="wp-block-heading">4. SSO三大核心原则</h4>



<ol class="wp-block-list">
<li>所有账号登录操作<strong>统一在SSO认证中心执行</strong>；</li>



<li>认证中心提供机制，通知各个Web应用当前用户是否已认证；</li>



<li>认证中心与全部业务Web应用预先建立信任关系。</li>
</ol>



<h5 class="wp-block-heading">两大核心</h5>



<h4 class="wp-block-heading">CAS Server（认证服务端）</h4>



<ul class="wp-block-list">
<li>独立部署的Web程序，<strong>唯一认证中心</strong></li>



<li>职责：接收账号密码、完成用户身份校验；签发票据（Ticket）、管理全局会话Cookie(TGC)</li>
</ul>



<h4 class="wp-block-heading">CAS Client（客户端，嵌入各个业务系统）</h4>



<ul class="wp-block-list">
<li>部署在各个业务Web应用内（一般以过滤器Filter形式实现）</li>



<li>职责：拦截受保护资源请求；未登录时，自动将浏览器重定向至CAS Server登录页面</li>
</ul>



<h4 class="wp-block-heading">流程</h4>



<ol class="wp-block-list">
<li><strong>用户访问业务系统资源</strong> → CAS Client拦截请求，检测请求中没有<code>Service Ticket</code></li>



<li>Client将浏览器<strong>重定向</strong>到 CAS Server登录地址，并携带当前业务系统地址（Service）</li>



<li>用户在CAS服务端输入账号密码完成登录认证
<ul class="wp-block-list">
<li>登录成功：CAS Server向浏览器写入 <strong>TGC（Ticket Granting Cookie）全局会话Cookie</strong></li>



<li>生成一次性票据：<strong>Service Ticket（ST）</strong></li>
</ul>
</li>



<li>CAS Server再次重定向浏览器，回到业务系统地址，URL参数带上 <code>Ticket=xxx</code></li>



<li><strong>业务系统CAS Client后台发起服务端请求</strong>，携带Service地址+Ticket，向CAS Server校验票据合法性</li>



<li>CAS Server校验票据有效，返回用户身份信息（用户名等）</li>



<li>校验通过，业务系统创建本地会话，用户正常访问页面</li>
</ol>



<p class="wp-block-paragraph"> <strong>TGC作用</strong>：只要浏览器保留TGC Cookie，后续访问其他接入CAS的系统时，不会再弹出登录页面，自动完成单点登录。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/zh/2026/08/03/%e4%bb%8b%e7%bb%8d-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
