<?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/ko/category/c-ko/cas-%ed%8a%9c%ed%86%a0%eb%a6%ac%ec%96%bc/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.foxdevelop.com</link>
	<description>독립 소프트웨어 개발 스튜디오</description>
	<lastBuildDate>Thu, 06 Aug 2026 08:07:31 +0000</lastBuildDate>
	<language>ko-KR</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/ko/2026/08/06/cas-%ea%b5%ac%ed%98%84/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/06/cas-%ea%b5%ac%ed%98%84/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Thu, 06 Aug 2026 08:07:31 +0000</pubDate>
				<category><![CDATA[CAS 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7825</guid>

					<description><![CDATA[구버전 CAS 구현 아이디어 핵심 원리 (CAS 1.0 프로토콜) web.config 설정 최신 CAS 서버는 기본적으로 HTTPS를 강제합니다. casUrl 값은 반드시 https://127.0.0.1:8443/cas/로 입력해야 합니다 CasEnter.aspx 페이지 소스 1. CasEnter.aspx 프론트엔드 2. ...]]></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> API를 호출해 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은 CAS 진입 중계 페이지인 CasEnter.aspx로 지정 --&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>API를 CAS3.0 <code>p3/serviceValidate</code>로 업그레이드<br>사용이 중단된 WebClient 대신 HttpClient 적용 </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;
        }

        // 티켓 검증
        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">CAS 구현</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/06/cas-%ea%b5%ac%ed%98%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>설치</title>
		<link>https://www.foxdevelop.com/ko/2026/08/06/%ec%84%a4%ec%b9%98/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/06/%ec%84%a4%ec%b9%98/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Thu, 06 Aug 2026 07:51:23 +0000</pubDate>
				<category><![CDATA[CAS 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7809</guid>

					<description><![CDATA[구버전 설치 안내 ‐ CAS 5.0 이전 의존 요구사항 1. JDK 버전：(JDK) Java 17직접 링크：Java Downloads &#124; Oracle ⚠️ 참고：JDK7은 구버전으로 구 CAS 버전에만 호환되며 신규 프로젝트에서는 사용하지 않는 것을 ...]]></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(웹 컨테이너)</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 사용을 강제하며 HTTP는 사용할 수 없습니다</strong>. 따라서 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">자체 서명 인증서는 브라우저에서 &#8220;안전하지 않음&#8221; 경고가 나타나는 것이 정상입니다. 운영 환경에서는 정식 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>외부 Tomcat이 필요 없는 독립 실행 Jar</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 버전 선택：<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/ko/2026/08/06/%ec%84%a4%ec%b9%98/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>소개</title>
		<link>https://www.foxdevelop.com/ko/2026/08/06/%ec%86%8c%ea%b0%9c/</link>
					<comments>https://www.foxdevelop.com/ko/2026/08/06/%ec%86%8c%ea%b0%9c/#respond</comments>
		
		<dc:creator><![CDATA[jack]]></dc:creator>
		<pubDate>Thu, 06 Aug 2026 07:36:17 +0000</pubDate>
				<category><![CDATA[CAS 튜토리얼]]></category>
		<guid isPermaLink="false">https://www.foxdevelop.com/?p=7792</guid>

					<description><![CDATA[개념 1. CAS CAS（Central Authentication Service, 중앙 인증 서비스）예일대학교에서 시작한 오픈소스 웹 SSO(싱글 사인온) 구현 프레임워크입니다. 2. SSO（싱글 사인온） 3. SSO 체계의 세 가지 역할 4. SSO 핵심 원칙 세 ...]]></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>웹 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>특징: 애플리케이션끼리 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>웹 애플리케이션(여러 업무 시스템)</li>



<li>SSO 인증 센터(유일)</li>
</ol>



<h4 class="wp-block-heading">4. SSO 핵심 원칙 세 가지</h4>



<ol class="wp-block-list">
<li>모든 계정 로그인 동작은 <strong>SSO 인증 센터에서 일괄 실행</strong>합니다;</li>



<li>인증 센터는 각 웹 애플리케이션에 현재 사용자 인증 여부를 알리는 메커니즘을 제공합니다;</li>



<li>인증 센터는 모든 업무 웹 애플리케이션과 사전에 신뢰 관계를 맺어야 합니다.</li>
</ol>



<h5 class="wp-block-heading">두 가지 핵심 구성요소</h5>



<h4 class="wp-block-heading">CAS Server（인증 서버 측）</h4>



<ul class="wp-block-list">
<li>독립 배포되는 웹 프로그램이며 <strong>유일한 인증 허브</strong></li>



<li>역할: 아이디와 비밀번호를 받아 사용자 신원 검증；티켓(Ticket) 발급, 전역 세션 Cookie(TGC) 관리</li>
</ul>



<h4 class="wp-block-heading">CAS Client（각 업무 시스템에 내장되는 클라이언트）</h4>



<ul class="wp-block-list">
<li>각 업무 웹 애플리케이션 안에 배포하며 보통 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）전역 세션 쿠키</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 쿠키가 유지되는 한 CAS 연동된 다른 시스템에 접속할 때 로그인 페이지가 뜨지 않고 자동으로 싱글 사인온이 진행됩니다.</p>



<p class="wp-block-paragraph">소개</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foxdevelop.com/ko/2026/08/06/%ec%86%8c%ea%b0%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
