CAS单点登录-多属性返回(十六)

CAS单点登录-多属性返回(十六)

再次强调,目前我们使用的cas版本为5.1.5

在业务系统的开发中往往少不了返回用户的一些属性,包括单属性以及多属性,例如用户的一些基本信息或者权限,部门角色等等,因为业务系统获取到这些信息可能需要做一些其他业务逻辑

本章目标

  1. 通过jdbc返回单属性,多属性
  2. 通过配置过滤策略,包括允许所有以及限制部分
  3. 介绍cas多属性策略
  4. 开放源码学习测试

实战

CAS多属性特性

首先先介绍一下cas能给我们做什么,因为在不同的部署环境数据隔离情况下,可能选型会稍微不一样


获取属性特性:

  • LDAP(通过ldap查询属性)
  • JDBC(直接查询数据库)
  • JSON(静态文件配置属性)
  • Groovy(通过脚本生成属性)
  • REST(通过接口获取属性,若sso不能直接访问数据库考虑该策略)

其中最常用的为JDBCREST这两种方法


限制属性返回:(由于接入服务端会有些不同要求,如A系统要求返回用户名B系统不允许返回用户名)

  • Return All (所有配置返回的都返回)
  • Deny All (配置拒绝的出现则报错)
  • Return Allowed(只返回允许的主要属性)
  • 自定义Filter(自定义过滤策略)

当然cas还支持其他多属性特性,这里不一一介绍,只把多用的简单列举,有兴趣自行到官网了解策略以及过滤

常用为Return AllReturn Allowed

代码实战

本章只讲jdbc方式获取多属性

服务配置

{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|imaps|http)://localhost:8080/sample.*",
  "name": "CasClient-demo",
  "id": 10000001,
  "description": "CasClient-demo service",
  "evaluationOrder": 100,
  "theme":"apereo",
  "logoutUrl": "http://localhost:8080/sample/" ,
  "attributeReleasePolicy" : {
    "@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
  }
}

以上配置为允许所有属性返回,若是允许部分属性,则

只允许school、email返回

"attributeReleasePolicy" : {
    "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",
    "allowedAttributes" : [ "java.util.ArrayList", [ "school", "email" ] ]
  }

属性查询配置

application.properties

## 多属性返回开始

###单行
# key为数据库的列,value为输出属性的key
cas.authn.attributeRepository.jdbc[0].attributes.email=email
cas.authn.attributeRepository.jdbc[0].attributes.address=address
cas.authn.attributeRepository.jdbc[0].attributes.age=age
cas.authn.attributeRepository.jdbc[0].singleRow=true
cas.authn.attributeRepository.jdbc[0].order=0
cas.authn.attributeRepository.jdbc[0].url=${cas.authn.jdbc.query[0].url}
# 以下属性为查询sql时,当为多个时逗号分隔,如填写username、email,sql会变成 select * from sys_user where username=${?} {and/or} email=${?}
cas.authn.attributeRepository.jdbc[0].username=username,email
cas.authn.attributeRepository.jdbc[0].queryType=OR
cas.authn.attributeRepository.jdbc[0].user=${cas.authn.jdbc.query[0].user}
cas.authn.attributeRepository.jdbc[0].password=${cas.authn.jdbc.query[0].password}
cas.authn.attributeRepository.jdbc[0].sql=select * from sys_user where {0}
cas.authn.attributeRepository.jdbc[0].dialect=${cas.authn.jdbc.query[0].dialect}
cas.authn.attributeRepository.jdbc[0].ddlAuto=none
cas.authn.attributeRepository.jdbc[0].driverClass=${cas.authn.jdbc.query[0].driverClass}
cas.authn.attributeRepository.jdbc[0].leakThreshold=10
cas.authn.attributeRepository.jdbc[0].propagationBehaviorName=PROPAGATION_REQUIRED
cas.authn.attributeRepository.jdbc[0].batchSize=1
cas.authn.attributeRepository.jdbc[0].failFast=true


#多行
cas.authn.attributeRepository.jdbc[1].attributes.group=group_multi
cas.authn.attributeRepository.jdbc[1].attributes.school=school_multi
#键值对
cas.authn.attributeRepository.jdbc[1].columnMappings.ATTR_KEY=ATTR_VAL
cas.authn.attributeRepository.jdbc[1].singleRow=false
cas.authn.attributeRepository.jdbc[1].order=1
cas.authn.attributeRepository.jdbc[1].url=${cas.authn.jdbc.query[0].url}
cas.authn.attributeRepository.jdbc[1].username=username
cas.authn.attributeRepository.jdbc[1].user=${cas.authn.jdbc.query[0].user}
cas.authn.attributeRepository.jdbc[1].password=${cas.authn.jdbc.query[0].password}
cas.authn.attributeRepository.jdbc[1].sql=select * from sys_attrs where {0}
cas.authn.attributeRepository.jdbc[1].dialect=${cas.authn.jdbc.query[0].dialect}
cas.authn.attributeRepository.jdbc[1].ddlAuto=none
cas.authn.attributeRepository.jdbc[1].driverClass=${cas.authn.jdbc.query[0].driverClass}
cas.authn.attributeRepository.jdbc[1].leakThreshold=10
cas.authn.attributeRepository.jdbc[1].propagationBehaviorName=PROPAGATION_REQUIRED
cas.authn.attributeRepository.jdbc[1].batchSize=1
cas.authn.attributeRepository.jdbc[1].failFast=true
## 多属性返回结束
数据

看看多行的数据如何列举

表结构:

/*
账号表
*/
CREATE TABLE SYS_USER (
  USERNAME VARCHAR(30) PRIMARY KEY,
  PASSWORD VARCHAR(64) NOT NULL,
  EMAIL    VARCHAR(50),
  ADDRESS  VARCHAR(100),
  AGE      INT,
  EXPIRED INT,
  DISABLE INT
);

/*
* 用户属性表
*/
CREATE TABLE SYS_ATTRS (
  USERNAME VARCHAR(30) NOT NULL,
  ATTR_KEY VARCHAR(50) NOT NULL,
  ATTR_VAL     VARCHAR(100) NOT NULL
);

数据:

---明文MD5数据

/*123*/
INSERT INTO SYS_USER VALUES ('admin', '202cb962ac59075b964b07152d234b70', 'huang.xx@foxmail.com', '广州天河', 27, 0, 0);


---用户属性表
INSERT INTO SYS_ATTRS VALUES ('admin', 'group', 'ADMIN_ROLE');
INSERT INTO SYS_ATTRS VALUES ('admin', 'group', 'MANAGEMENT_ROLE');
INSERT INTO SYS_ATTRS VALUES ('admin', 'group', 'DEV_ROLE');
INSERT INTO SYS_ATTRS VALUES ('admin', 'school', 'GuangZhou');
INSERT INTO SYS_ATTRS VALUES ('admin', 'school', 'ZhuHai');
INSERT INTO SYS_ATTRS VALUES ('zhangsan', 'group', 'DEV_ROLE');

测试结果

这里写图片描述

这里写图片描述

源码测试

测试步骤:

  • mvn clean install
  • 其余步骤启动查看readme

  • 下载代码尝试:GitHub 其他版本可以到GitHub或者码云查看

发现一些意外的事情可以考虑翻翻前面的博客进行学习哦

作者联系方式

如果技术的交流或者疑问可以联系或者提出issue。

邮箱:huang.wenbin@foxmail.com

QQ: 756884434 (请注明:SSO-CSDN)

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
MaxKey(马克思的钥匙)用户单点登录认证系统(Sigle Sign On System),寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。 MaxKey主要功能: 1、所有应用系统共享一个身份认证系统 2、所有应用系统能够识别和提取ticket信息 3、提供标准的认证接口以便于其他应用集成SSO,安全的移动接入,安全的API、第三方认证和互联网认证的整合。 4、提供用户生命周期管理,支持SCIM 2协议,基于Apache Kafka代理,通过连接器(Connector)实现身份供给同步。 5、认证中心具有平台无关性、环境多样性,支持Web、手机、移动设备等, 如Apple iOS,Andriod等,将认证能力从B/S到移动应用全面覆盖。 6、多种认证机制并存,各应用系统可保留原有认证机制,同时集成认证中心的认证;应用具有高度独立性,不依赖认证中心,又可用使用认证中心的认证,实现单点登录。 7、基于Java平台开发,采用Spring、MySQL、Tomcat、Apache Kafka、Redis等开源技术,支持微服务,扩展性强。 8、许可证 Apache License, Version 2.0,开源免费。     MaxKey单点登录认证系统 更新日志: v2.7.0 加入Dromara开源组织,官方网站的优化,文档优化 BootJar,Docker,Standard三种打包方式的配置优化 openldap,activedirectory密码验证支持 数据库访问注释由@Service改为@Repository cas logout优化支持 CAS单点注销及返回数据类型适配器的优化 CAS返回数据类重构 CAS地址优化统一配置到常量类CasConstants 注销空指针异常BUG OAuth2地址优化统一配置常量类OAuth2Constants OAuth2 Token多次调用时认证转换的BUG ExtendApi标准优化 增加基于时间签名的ExtendApi适配器 返回数据Constants整合 扩展数据配置优化 LDAP和MS AD固定属性Constants SpringSecurity OAuth 2客户端登录适配 移除Desktop的支持,后续可以开发FormBase的适配器定制 application.properties profiles的优化,不同环境启动更加简单 删除maxkey.properties,配置整合到 application.properties 增加适配器注册功能,在配置应用时只需选择对应的适配器 增加Synchronizer接口同步的功能 增加TimeBased OTP接口支持 XSS安全防护功能 禅道项目管理系统单点登录适配 GitLab单点登录适配 云速邮箱单点登录适配 JumpServer开源堡垒机单点登录适配 华为云单点登录适配 Jenkins单点登录适配 通知公告简单功能实现 查询参数优化 SDK优化 依赖jar引用、更新和升级

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值