[sso]搭建CAS單點服務器

 

1、下載服務器端文件javascript

Cas Client下載:http://developer.jasig.org/cas-clients/    css

CAS Server:cas-server-4.0.0-release.ziphtml

tomcat:apache-tomcat-7.0.86html5

 

2、查看java環境,確保編譯和運行環境一致java

C:\Users\Andy>java -versionmysql

java version "1.8.0_91"jquery

Java(TM) SE Runtime Environment (build 1.8.0_91-b15)git

Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)github

 

C:\Users\Andy>javac -versionweb

javac 1.8.0_91

 

3 生成證書

這裏生成了一個證書:cas.keystore 別名爲cas,路徑在 F:\keys\castest\cas.keystore

C:\Users\Andy>keytool  -genkey  -keystore  "F:\keys\castest\cas.keystore"   -alias  cas  -keyalg   RSA   -validity  365

輸入密鑰庫口令:cascas

再次輸入新口令:cascas

您的名字與姓氏是什麼?

  [Unknown]:  YQ

您的組織單位名稱是什麼?

  [Unknown]:  WD

您的組織名稱是什麼?

  [Unknown]:  WD

您所在的城市或區域名稱是什麼?

  [Unknown]:  QD

您所在的省/市/自治區名稱是什麼?

  [Unknown]:  SD

該單位的雙字母國家/地區代碼是什麼?

  [Unknown]:  CN

CN=YQ, OU=WD, O=WD, L=QD, ST=SD, C=CN是否正確?

  [否]:  y

 

輸入 <castest> 的密鑰口令

        (若是和密鑰庫口令相同, 按回車):cascas

再次輸入新口令:cascas

 

4、查看生成證書

C:\Users\Andy>keytool   -list  -v  -keystore  "F:\keys\castest\cas.keystore"

 

5、導出證書到與cas.keystore相同的路徑F:\keys\castest\下

C:\Users\Andy>keytool -export -file F:/keys/castest/cas.crt  -alias cas -keystore F:\keys\castest\cas.keystore

輸入密鑰庫口令:

存儲在文件 <F:/keys/castest/cas.crt> 中的證書

 

6、將證書導入jre

若是security中已經存在cacerts,須要先將其刪除

導入時若是提示:keytool 錯誤: java.io.FileNotFoundException: C:\Program Files\Java\jdk1.7.0_80\jre\lib\security (拒絕訪問。) 則須要給與系統用戶徹底控制security文件夾的權限

C:\Users\Andy>keytool -import -keystore "C:\Program Files\Java\jdk1.7.0_80\jre\lib\security\cacerts" -file F:/keys/castest/cas.crt -alias cas

輸入密鑰庫口令:

再次輸入新口令:

全部者: CN=YQ, OU=WD, O=WD, L=QD, ST=SD, C=CN

發佈者: CN=YQ, OU=WD, O=WD, L=QD, ST=SD, C=CN

序列號: 7a70826d

有效期開始日期: Sat Apr 28 12:30:12 CST 2018, 截止日期: Sun Apr 28 12:30:12 CST 2019

證書指紋:

         MD5: 86:44:66:66:EA:88:73:BF:A3:3A:F2:6D:20:54:EF:52

         SHA1: D3:70:FE:73:42:06:98:DC:E9:9E:88:F7:10:AF:28:A0:0A:4E:27:92

         SHA256: 99:76:5F:F2:9D:B7:74:AF:6B:CE:23:7A:49:80:A1:B6:4D:72:D9:79:08:7B:97:FE:CF:2B:AB:B1:E4:29:A8:0D

         簽名算法名稱: SHA256withRSA

         版本: 3

 

擴展:

 

#1: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: 4E EB 4E A5 55 8A 39 40   6B 3B 7A BF 9B 6E B8 91  N.N.U.9@k;z..n..

0010: E9 9E 4E F8                                        ..N.

]

]

 

是否信任此證書? [否]:  y

證書已添加到密鑰庫中

 

7、配置tomcat服務器

【若是須要啓用SSL經過https協議的8443端口訪問,在tomcat的server.xml中配置】

keystoreFile="F:/keys/castest/cas.keystore "

keystorePass="cascas"

=====================================================================

        <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"

               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

               keystoreFile="F:/keys/castest/cas.keystore "

               keystorePass="cascas"

               clientAuth="false" sslProtocol="TLS" />

=====================================================================

 

8、 部署cas的war包

下載cas服務器端cas-server-4.0.0-release.zip,在modules目錄下找到cas-server-webapp-4.0.0.war,將其複製到%TOMCAT_HOME%\webapps下,並將名稱改成cas.war

 

9、啓動服務並訪問以下連接

常規http訪問:http://localhost:8080/cas/login

安全https訪問:https://localhost:8443/cas/login

輸入默認的初始化帳號和密碼(在deployerConfigContext.xml中配置的):casuser / Mellon 登陸

若是顯示log in successful 說明服務器端已經配置成功。

可經過https://localhost:8443/cas/logout退出登陸

 

10、配置cas用戶驗證數據源爲mysql

(1)添加相應的jar包(或在pom.xml中添加依賴後從新編譯)須要以下4個包,放在cas.war的lib下

 

找到位置 id="primaryAuthenticationHandler",修改其配置內容。

並增長MD5PasswordEncoder、dataSource、selfAttributeRepository、queryAttributeMapping的配置

注意:這裏啓用了passwordEncoder加密,數據庫的password存放的是md5加密後的密碼串:

e10adc3949ba59abbe56e057f20f883e

若是這裏不使用passwordEncoder,那麼數據庫的password存放的是原始密碼字符串123456

才能單點登陸經過

<!--yeqing update start-->
    <bean  id="MD5PasswordEncoder"   class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"   autowire="byName">   
        <constructor-arg  value="MD5"/>
    </bean>
    
    <bean id="primaryAuthenticationHandler"  
          class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">  
          <property name="dataSource" ref="dataSource"/>  
          <property   name="passwordEncoder"    ref="MD5PasswordEncoder"/>
          <property name="sql" value="select password from wd_user where yhbh = ?"/>  
    </bean>

        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
                   <property name="driverClassName">  
                           <value>com.mysql.jdbc.Driver</value>  
                   </property>  
                   <property name="url">  
                            <value>jdbc:mysql://localhost:3306/test</value>  
                   </property>  
                   <property name="username">  
                            <value>root</value>  
                   </property>  
                   <property name="password">  
                            <value>root</value>  
                   </property>  
    </bean>  
    <bean id="selfAttributeRepository"  class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">  
          <constructor-arg index="0" ref="dataSource" />  
          <constructor-arg index="1"  value="select yhbh,password from wd_user where {0}" />  
    
    <!-- 組裝sql用的查詢條件屬性 -->   
  <property name="queryAttributeMapping">  
       <map>  
           <!-- key必須是uername並且是小寫不然會致使取不到用戶的其它信息,value對應數據庫用戶名字段,系統會本身匹配 -->  
        <entry key="username" value="yhbh" />  
        <entry key="password" value="password" />  
       </map>  
      </property>  
      <property name="resultAttributeMapping">  
       <map>  
           <!-- key爲對應的數據庫字段名稱,value爲提供給客戶端獲取的屬性名字,系統會自動填充值 -->  
        <entry key="username" value="yhbh"></entry>  
        <entry key="password" value="password"></entry>  
       </map>  
      </property>  
</bean>  
<!--yeqing update end-->

 

(3)測試登陸

密碼輸入123456

11、修改 cas 服務器端自定義登陸頁面

 

有時候根據本身的業務系統須要定義單點登陸的登陸頁,這時候按以下操做便可

 

1.cas統一認證的登錄頁面位於:cas目錄/WEB-INF/view/jsp/default 文件夾裏,其中ui/casLoginView.jsp爲登錄頁面

 

11、修改 cas 服務器端自定義登陸頁面

 

有時候根據本身的業務系統須要定義單點登陸的登陸頁,這時候按以下操做便可

 

1.cas統一認證的登錄頁面位於:cas目錄/WEB-INF/view/jsp/default 文件夾裏,其中ui/casLoginView.jsp爲登錄頁面

 

11、修改 cas 服務器端自定義登陸頁面

 

有時候根據本身的業務系統須要定義單點登陸的登陸頁,這時候按以下操做便可

 

1.cas統一認證的登錄頁面位於:cas目錄/WEB-INF/view/jsp/default 文件夾裏,其中ui/casLoginView.jsp爲登錄頁面

2.首先咱們複製一份default文件夾 重命名爲custom

3.而後複製classes/default_views.properties  到 classes/custom_views.properties ,而後打開custom_views.properties 修改登錄頁面的路徑爲咱們複製的custom 文件夾。

修改爲:

 

 

4 修改 cas目錄/cas.properties 中 cas.viewResolver.basename =custom_views

到這一步咱們只是將登錄頁面拷貝了一份而後指向這份拷貝,接下來咱們就能夠隨意修改咱們拷貝的頁面,這樣作的目的是若是之後想還原回來比較方便,只須要修改引用就行。

 

接下來咱們修改casLoginView.jsp頁面:



修改的要求是:須要保留登錄form表單(但能夠修改樣式,雖然表單標籤是帶前綴的,但和普通html標籤同樣修改其樣式,也能夠將全部的信息輸出刪除 如<spring:message code="screen.welcome.label.netid.accesskey" var="userNameAccessKey" />)但必須保留保單中的用戶名、密碼輸入框,確認按鈕,並且最好複製其標籤,修改其class屬性來修改樣式,修改後的casLoginView.jsp:

<!DOCTYPE html>
<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>

<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>CAS &#8211; Central Authentication Service</title>
  <link rel="icon" href="<c:url value="/favicon.ico" />" type="image/x-icon" />
  <style>
    @charset "utf-8";
    /* CSS Document */

    * { font: 13px/1.5 '微軟雅黑'; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -box-sizing: border-box; padding:0; margin:0; list-style:none; box-sizing: border-box; }
    body, html { height:100%; overflow:hidden; }
    body { background:#93defe; background-size: cover; }
    a { color:#27A9E3; text-decoration:none; cursor:pointer; }
    img{ border:none;}

    .login_box{ width:1100px; margin:120px auto 0;}
    .login_box .login_l_img{ float:left; width:432px; height:440px; margin-left:50px;}
    .login_box .login_l_img img{width:500px; height:440px; }
    .login {height:360px; width:400px; padding:50px; background-color: #ffffff;border-radius:6px;box-sizing: border-box; float:right; position:relative; margin-top:50px;
    margin-right:350px;}
    .login_logo{ width:120px; height:120px; border:5px solid #93defe;border-radius:100px; background:#fff; text-align:center; line-height:110px; position:absolute; top:-60px; right:140px;}
    .login_name{ width:100%; float:left; text-align:center; margin-top:20px;}
    .login_name p{ width:100%; text-align:center; font-size:18px; color:#444; padding:10px 0 20px;}
    .login_logo img{ width:60px; height:60px;display: inline-block; vertical-align: middle;}
    input[type=text], input[type=file], input[type=password], input[type=email], select { border: 1px solid #DCDEE0; vertical-align: middle; border-radius: 3px; height: 50px; padding: 0px 16px; font-size: 14px; color: #555555; outline:none; width:100%;margin-bottom: 15px;line-height:50px; color:#888;}
    input[type=text]:focus, input[type=file]:focus, input[type=password]:focus, input[type=email]:focus, select:focus { border: 1px solid #27A9E3; }
    input[type=submit], input[type=button] { display: inline-block; vertical-align: middle; padding: 12px 24px; margin: 0px; font-size:16px; line-height: 24px; text-align: center; white-space: nowrap; vertical-align: middle; cursor: pointer; color: #ffffff; background-color: #27A9E3; border-radius: 3px; border: none; -webkit-appearance: none; outline:none; width:100%; }
    .copyright { font-size:14px; color:#fff; display:block;width:100%; float:left; text-align:center; margin-top:60px;}

    #password_text{border: 1px solid #DCDEE0; vertical-align: middle; border-radius: 3px; height: 50px; padding: 0px 16px; font-size: 14px; color: #888; outline:none; width:100%;margin-bottom: 15px;display: block; line-height:50px;}
      
  </style>
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.1/html5shiv.js" type="text/javascript"></script>
  <![endif]-->
</head>
<body id="cas">
  <div id="container">
      <header>
        <!--
        <a id="logo" href="http://www.jasig.org" title="<spring:message code="logo.title" />">Jasig</a>
        <h1>Central Authentication Service (CAS)</h1>
        -->
      </header>
      <div id="content">

      <!--yeqing-->
      <div class="login_box">
             <!-- <div class="login_l_img"><img src="" /></div>-->
              <div class="login">
                  <div class="login_logo"><a href="#"><img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1524910752212&di=bafd227560a1038b7f280b71e62b6cc2&imgtype=0&src=http%3A%2F%2Fimg.25pp.com%2Fuploadfile%2Fsoft%2Fimages%2F2015%2F0722%2F20150722050855963.jpg" /></a></div>
                  <div class="login_name">
                       <p>業務系統</p>
                  </div>
                  <form:form method="post" id="fm1" commandName="${commandName}" htmlEscape="true">
                    <form:errors path="*" id="msg" cssClass="errors" element="div" htmlEscape="false" />
                      <input name="username" type="text"  value="用戶名" onfocus="this.value=''" onblur="if(this.value==''){this.value='用戶名'}">
            
                      <span id="password_text" onclick="this.style.display='none';document.getElementById('password').style.display='block';document.getElementById('password').focus().select();" >密碼</span>
                        <input name="password" type="password" id="password" style="display:none;" onblur="if(this.value==''){document.getElementById('password_text').style.display='block';this.style.display='none'};"/>
                        
                        <input type="hidden" name="lt" value="${loginTicket}" />
                        <input type="hidden" name="execution" value="${flowExecutionKey}" />
                        <input type="hidden" name="_eventId" value="submit" />
                        
                        <input class="btn-submit" style="width:100%;"  name="submit" accesskey="l" value="登陸" tabindex="4" type="submit" />
                 </form:form>
              </div>
              <div class="copyright">扯淡公司 版權全部©2016-2018 技術支持電話:000-00000000</div>
        </div>
      <!--yeqing-->

</div> <!-- END #content -->
    </div> <!-- END #container -->
    
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
    <script type="text/javascript" src="https://github.com/cowboy/javascript-debug/raw/master/ba-debug.min.js"></script>
    
    <spring:theme code="cas.javascript.file" var="casJavascriptFile" text="" />
    <script type="text/javascript" src="<c:url value="${casJavascriptFile}" />"></script>
  </body>
</html>

 

輸入用戶名密碼,執行登錄,能夠看到能登錄成功。

相關文章
相關標籤/搜索