美文网首页单点登录SSO
SSO单点登录教程(八)CAS-搭建CAS Server服务端(

SSO单点登录教程(八)CAS-搭建CAS Server服务端(

作者: 叩丁狼教育 | 来源:发表于2018-07-15 17:45 被阅读107次

    作者:蓝雄威,叩丁狼教育高级讲师。原创文章,转载请注明出处。

    一、前言

    在上一章节,我们已经把CAS Server搭建好了,但是使用的是静态的认证,即用户名和密码是硬编码在配置文件中的.很显然这种方式并不适合公司里面的开发,公司里面的用户名和密码应该是通过加密的方式存储到数据库中的.
    所以接下来这章节讲给同学们讲解一下CAS Server如何使用JDBC方式进行认证.

    二、准备工作

    我们需要把用户存储到数据库中,脚本文件cas.sql在
    https://github.com/javalanxiongwei/cas-overlay-template-master.
    1.创建数据库cas,执行cas.sql文件,执行后拥有了用户表sys_user.
    说明:

    • expired字段表示过期,1表示已过期,需要修改密码
    • disabled表示账号是否禁用,1表示禁用


      sys_user表

      数据表存放的数据如下图所示:

    id username password expired disabled
    1 admin 21232f297a57a5a743894a0e4a801fc3 0 1
    2 wolfcode 71120db8bf616bcf5b913557587435ad 1 0
    3 lanxw fae0b27c451c728867a567e8c1bb4e53 0 0

    说明:
    如果采用MD5加密,那password就是MD5加密后的密文,sha同样如此
    admin、wolfcode、lanxw明文密码分别是admin、wolfcode、666

    2.在POM文件中添加如下依赖:

    <!--新增支持jdbc验证-->
    <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-jdbc</artifactId>
            <version>${cas.version}</version>
    </dependency>
    <!--使用mysql驱动-->
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
    </dependency>
    

    三、配置

    需要在配置中告诉框架要哪个数据库的哪个表查询数据,所以在application.properties新增如下配置.

    #jdbc验证配置
    #Query Database Authentication 数据库查询校验用户名开始
    #查询账号密码sql,必须包含密码字段
    cas.authn.jdbc.query[0].sql=select * from sys_user where username=?
    #指定上面的sql查询字段名(必须)
    cas.authn.jdbc.query[0].fieldPassword=password
    #指定过期字段,1为过期,若过期需要修改密码
    cas.authn.jdbc.query[0].fieldExpired=expired
    #为不可用字段段,1为不可用,
    cas.authn.jdbc.query[0].fieldDisabled=disabled
    #数据库方言hibernate的知识
    cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
    #数据库驱动 
    cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
     #数据库连接 
    cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=UTF-8
     #数据库用户名 
    cas.authn.jdbc.query[0].user=root
     #数据库密码
    cas.authn.jdbc.query[0].password=admin
     #默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密 
    cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
    cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
    cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
    #Query Database Authentication 数据库查询校验用户名结束 
    #jdbc验证配置
    

    以上配置,如驱动,查询数据库等等需要根据不同的场景进行调整:

    • 若密码无加密,调整passwordEncoder.type=NONE
    • 若密码加密策略为SHA,调整passwordEncoder.encodingAlgorithm=SHA
    • 若算法为自定义,实现org.springframework.security.crypto.password.PasswordEncoder接口,并且把类名配置在passwordEncoder.type

    四、测试

    在项目所在目录运行build.cmd run,在浏览器输入http://www.sso.com:8443/cas/login.

    输入admin/admin


    账号被禁用

    输入wolfcode/wolfcode


    账户过期
    输入lanxw/666
    正常登陆

    五、其他

    我们已经把CAS Server端的验证变成使用JDBC的方式认证,而且在数据库中也已经对明文密码使用md5进行加密,但是只是用md5加密安全性不够高.所以一般我们会对密码使用md5+盐加密来增加密码管理的安全性.
    我们需要修改application.properties,在配置文件中指定盐值和加密次数:
    对应的sys_user_encode的脚本也是从上面的github地址获取.
    测试过程和第四点是一致的.

    #Encode Database Authentication 开始
    #加密次数
    cas.authn.jdbc.encode[0].numberOfIterations=2
    #该列名的值可替代上面的值,但对密码加密时必须取该值进行处理(如果使用这个配置需要把上面的配置注释)
    #cas.authn.jdbc.encode[0].numberOfIterationsFieldName=
    # 盐值固定列
    cas.authn.jdbc.encode[0].saltFieldName=username
    #静态盐值(如果使用这个配置需要把上面的配置注释)
    #cas.authn.jdbc.encode[0].staticSalt=.
    cas.authn.jdbc.encode[0].sql=select * from sys_user_encode where username=?
    #对处理盐值后的算法
    cas.authn.jdbc.encode[0].algorithmName=MD5
    cas.authn.jdbc.encode[0].passwordFieldName=password
    cas.authn.jdbc.encode[0].expiredFieldName=expired
    cas.authn.jdbc.encode[0].disabledFieldName=disabled
    cas.authn.jdbc.encode[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=UTF-8
    cas.authn.jdbc.encode[0].dialect=org.hibernate.dialect.MySQLDialect
    cas.authn.jdbc.encode[0].user=root
    cas.authn.jdbc.encode[0].password=admin
    cas.authn.jdbc.encode[0].driverClass=com.mysql.jdbc.Driver
    #Encode Database Authentication 结束
    
    WechatIMG9.jpeg

    相关文章

      网友评论

        本文标题:SSO单点登录教程(八)CAS-搭建CAS Server服务端(

        本文链接:https://www.haomeiwen.com/subject/hvgppftx.html