前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apereo CAS(二)用户认证

Apereo CAS(二)用户认证

作者头像
dhyuan
发布2022-11-08 12:52:07
1.4K0
发布2022-11-08 12:52:07
举报
文章被收录于专栏:响应式编程响应式编程

上篇使用默认的用户名密码登录 casuser/Mellon 登录cas。我们可以通过etc/cas/config/cas.properties 配置不同的后端存储用来进行用户信息的authentication的校验。

这里使用MongoDB作为用户信息认证的后端存储,参考这里官方文档:https://apereo.github.io/cas/6.5.x/authentication/MongoDb-Authentication.html。 主要是三个步骤,但需要先把 cas-server-support-mongo 加到build.gradle文件。

代码语言:javascript
复制
implementation "org.apereo.cas:cas-server-support-mongo"

1)在MongoDb中保存用户信息

获得密码’md5password’的MD5值,并保存到collection。 $ md5 -s ‘md5password’ MD5 (“md5password”) = ec85070aa70e598eda72cbe82d99fabc

代码语言:javascript
复制
db.cas_user.insert({
    "username": "casuser",
    "password": "ec85070aa70e598eda72cbe82d99fabc",
    "first_name": "john",
    "last_name": "smith"
})

2) 配置cas从MongoDB获取用户信息

通过直接设置client-uri表明连接到mongoDB的哪个库做认证,就不用再分别设置注入host、database这样的参数了。 cas-user是保存用户数据的collection。 如果因为我们使用MD5作为密码摘要来验证,所以这里password-encoder.type 设置为 DEFAULT,encoding-algorithm设置为MD5。可以查看源码 DefaultPasswordEncoder 理解这个设置,诸如BCrypt是不需要encoding-algorithm的。 cas也支持BCRYPT、PBKDF2这样的密码编码。也可以把type设置为一个自己实现的PasswordEncoder。 如果密码是明文保存的,则可把 password-encoder.type 设为NONE。

代码语言:javascript
复制
# -- Use MongoDB as the authentication data source.
cas.authn.mongo.client-uri=mongodb://admin:password@localhost:27017/cas_db
cas.authn.mongo.collection=casdb_user
# cas.authn.mongo.database-name=
# cas.authn.mongo.host=localhost=
# cas.authn.mongo.password=
# cas.authn.mongo.port=27017
# cas.authn.mongo.principal-transformation.groovy.location=
# cas.authn.mongo.user-id=
cas.authn.mongo.password-encoder.type=DEFAULT
cas.authn.mongo.password-encoder.encoding-algorithm=MD5

3)登录验证

运行./gradlew clean copyCasConfiguration build run,在浏览器输入casuser / md5password 进行登录。

4)使用BCrypt

BCrypt是当前最通用的password encoding方式了。BCrypt会自己内部产生一个随机salt并和hash的结果保存在一起作为encode的结果。这样每次做BCrypt的结果都不同并且再校验时也无需提供salt。可参考这篇文章spring-security-registration-password-encoding-bcrypt。

生成一个密码bcpassword的BCrypt值:

代码语言:javascript
复制
$ brew tap spring-io/tap
$ brew install spring-boot
$ spring encodepassword bcpassword
{bcrypt}$2a$10$fJc2wH.Oc1SES8Ju/fCoFOjqs6CRnIgPAbUXqRJQ.DGnBVTGG.bLy

更新数据库里的password为2a10

设置 cas.authn.mongo.password-encoder.type=BCRYPT 注释掉 cas.authn.mongo.password-encoder.encoding-algorithm。

使用新代码和配置运行CAS Server:

代码语言:javascript
复制
./gradlew clean copyCasConfiguration build run

用密码bcpassword登录。

这个时候cas后台就已经使用BCrypt来验证密码了。其实Type=BCRYPT就对应到了class org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 响应式编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上篇使用默认的用户名密码登录 casuser/Mellon 登录cas。我们可以通过etc/cas/config/cas.properties 配置不同的后端存储用来进行用户信息的authentication的校验。
    • 1)在MongoDb中保存用户信息
      • 2) 配置cas从MongoDB获取用户信息
        • 3)登录验证
          • 4)使用BCrypt
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档