CAS實現單點登錄

jopen 11年前發布 | 84K 次閱讀 單點登錄 OpenID/單點登錄SSO

CAS介紹

  • 開源的企業級單點登錄解決方案
  • CAS Server 是需要獨立部署的 Web 應用
  • CAS Client 支持非常多的客戶端(這里指單點登錄系統中的各個 Web 應用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等
  • </ul>        

    CAS服務部署

    • CAS服務端下載:http://downloads.jasig.org/cas/
    • 解壓zip文件,改名為cas.war,然后復制到tomcat/webapp目錄下
    • 瀏覽器訪問:http://localhost:8080/cas
    • </ul>


      CAS-SERVER的默認驗證規則:只要用戶名和密碼相同就認證通過(僅僅用于測試,生成環境需要根據實際情況修改),輸入admin/admin 點擊登錄,就可以看到登錄成功的頁面

      Tomcat配置HTTPS

      • 創建證書

             這里使用JDK生成的證書,正式環境需購買專業提供商的證書

             用JDK自帶的keytool工具生成證書:

      keytool -genkey -alias xiaokaceng -keyalg RSA -keystore d
      :/cas/xiaokaceng

      注意:127.0.0.1==sso.xiaokaceng.com 在C:\Windows\System32\drivers\etc\hosts配置,只能輸入域名不能輸入IP

      • 導出證書

      keytool -export -file d:/cas/xiaokaceng.crt -alias xiaoka
      ceng -keystore d:/cas/xiaokaceng

      證書導出完成,可提供JDK使用

      • JVM導入證書

      keytool -import -keystore D:\JavaDev\jdk1.7\jre\lib\secur
      ity\cacerts -file d:\cas\xiaokaceng.crt -alias xiaokaceng

      特別提示:

      keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

      那么請輸入密碼:changeit

      • 應用到Web容器

             啟用Tomcat的SSL,開啟83和87的注釋,配置keystoreFile和keystorePass

      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
                     maxThreads="150" scheme="https" secure="true"
                     clientAuth="false" sslProtocol="TLS" keystoreFile="D:/cas/xiaokaceng" keystorePass="123456"/>

      注意:keystoreFile和keystorePass有大小寫之分


      CAS登錄

      • 啟動兩個tomcat客戶端,修改其端口(tomcat默認自帶的 webapps\examples 作為演示的簡單web項目)
      • 整合CAS-Client

            CAS-Client 下載地址:http://downloads.jasig.org/cas-clients/,解壓并拷貝相應jar

        


      修改web.xml

      <!-- ======================== 單點登錄開始 ======================== -->
          <!-- 用于單點退出,該過濾器用于實現單點登出功能,可選配置-->
          <listener>
            <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
          </listener>
      
          <!-- 該過濾器用于實現單點登出功能,可選配置。 -->
          <filter>
            <filter-name>CAS Single Sign Out Filter</filter-name>
            <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
          </filter>
          <filter-mapping>
            <filter-name>CAS Single Sign Out Filter</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>
      
          <filter>
            <filter-name>CAS Filter</filter-name>
            <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
            <init-param>
              <param-name>casServerLoginUrl</param-name>
              <param-value>https://sso.xiaokaceng.com:8443/cas/login</param-value>
            </init-param>
            <init-param>
              <param-name>serverName</param-name>
              <param-value>http://localhost:18080</param-value>
            </init-param>
          </filter>
          <filter-mapping>
            <filter-name>CAS Filter</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>
          <!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 -->
          <filter>
            <filter-name>CAS Validation Filter</filter-name>
            <filter-class>
              org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
            <init-param>
              <param-name>casServerUrlPrefix</param-name>
              <param-value>https://sso.xiaokaceng.com:8443/cas</param-value>
            </init-param>
            <init-param>
              <param-name>serverName</param-name>
              <param-value>http://localhost:18080</param-value>
            </init-param>
          </filter>
          <filter-mapping>
            <filter-name>CAS Validation Filter</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>
      
          <!--
            該過濾器負責實現HttpServletRequest請求的包裹,
            比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登錄用戶的登錄名,可選配置。
          -->
          <filter>
            <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
            <filter-class>
              org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
          </filter>
          <filter-mapping>
            <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>
      
          <!--
          該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登錄名。
          比如AssertionHolder.getAssertion().getPrincipal().getName()。
          -->
          <filter>
            <filter-name>CAS Assertion Thread Local Filter</filter-name>
            <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
          </filter>
          <filter-mapping>
            <filter-name>CAS Assertion Thread Local Filter</filter-name>
            <url-pattern>/*</url-pattern>
          </filter-mapping>
      
          <!-- ======================== 單點登錄結束 ======================== -->


      測試驗證,訪問http://localhost:18080/examples/servlets/servlet/HelloWorldExample


      CAS登出

      退出鏈接為:https://sso.xiaokaceng.com:8443/cas/logout


      CAS服務界面

      • 登錄界面:casLoginView.jsp
      • 登錄成功:casGenericSuccess.jsp
      • 登出界面:casLogoutView.jsp

      來自:http://my.oschina.net/u/1264515/blog/181598


     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!