SSO单点登录-认证服务器端搭建

/ 单点登录 / 没有评论 / 3300浏览

####(三)、配置单点登录服务器端 CAS Server

1、下载tomcat 修改配置(server.xml)

为了和其他程序分开;我专程下载了一个tomcat8 来放官方的cas-server.war;在部署应用之前需要修改tomcat的配置文件;$TOMCAT_HOME/conf/server.xml

     <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation that requires the JSSE
         style configuration. When using the APR/native implementation, the
         OpenSSL style configuration is required as described in the APR/native
         documentation -->
    <!-- -->
    <Connector port="8443" 
          protocol="org.apache.coyote.http11.Http11NioProtocol"
          maxThreads="150" SSLEnabled="true" scheme="https" 
          secure="true" 
          keystoreFile="/Users/huzd/Downloads/huzd" 
          keystorePass="huzdhuzd" 
          clientAuth="false" sslProtocol="TLS" />

找到上面代码所处位置并且对照着修改。 keystoreFile:是在证书生成环节制定的证书保存位置; keystorePass:证书生成时输入的证书密码;

2、部署CAS SERVER

CAS SSO官方有个服务器端的开源程序,下载地址如下:https://github.com/apereo/cas/releases 打开网址找到你想要的版本;注意不同版本对JDK和tomcat的要求。该官方实例的demo默认的是使用:SimpleTestUsernamePasswordAuthenticationHandler 来处理用户的认证请求;如果需要使用自己的数据库和用户表来认证、修改默认的登录界面都需要另外配置。这里简单说下如果使用自己的数据来实现用户认证。

首先:打开deployerConfigContext.xml 找到如下代码:
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
然后:使用如下代码进行替换及修改
<property name="authenticationHandlers">
   <list>
        ……
      <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
	    <property name="dataSource" ref="dataSource" ></property>
	    <property name="sql" value="select password from sys_user where username=?" ></property>
	    <property name="passwordEncoder" ref="MD5PasswordEncoder"/>
      </bean>
   </list>
</property>	

<!--  定义上面显示的数据源 datasource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/testdb" />
    <property name="username" value="root" />
    <property name="password" value="hello123" />
</bean>	

<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
	<constructor-arg index="0">
		<value>MD5</value>
	</constructor-arg>
</bean>	


	<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
		<constructor-arg index="0" ref="dataSource" />  
        <constructor-arg index="1"  value="select id,username,password,chinesename from sys_user where {0}" />  
        <!-- 组装sql用的查询条件属性 -->      
        <property name="queryAttributeMapping">  
            <map>  
                <!-- key必须是uername而且是小写否则会导致取不到用户的其它信息,value对应数据库用户名字段,系统会自己匹配 -->  
                <entry key="username" value="username" />  
            </map>  
        </property>  
        <property name="resultAttributeMapping">  
            <map>  
                <!-- key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值 -->  
                <entry key="id" value="id"></entry>  
                <entry key="username" value="username"></entry>  
                <entry key="password" value="password"></entry>  
                <entry key="chinesename" value="chinesename"></entry>  
            </map>  
        </property>  
	</bean>	

要记住添加对应数据库的驱动。