属性模块
cas在身份认证之后,会检索用户属性,这个时候就用到了属性模块,该模块包含两个概念:
- 属性解析
- 属性发布
属性解析
就是从已配置的数据源检索数据,然后进行缓存、rename、合并、聚合等一系列操作。
属性解析由cas中的 person-directory 项目管理,它能够进行主体(principal)解析,主体(principal)就是用来承载我们想要的用户属性的集合,配置见:
https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties-Common.html#person-directory-principal-resolution
person-directory 同时还维护着属性的缓存和合并的功能:
- 属性缓存:主要就是缓存的时长、缓存的个数等等
- 属性合并:就是将属性名进行重命名(将不同的属性名规范为统一字段),然后进行合并,合并的操作可以是:替换、添加、合并
默认缓存协议
默认,属性会缓存到SSO session中。
也就是说,尽管 PersonDirectory 提供不同的缓存模型,
默认情况下,(从CAS角度)属性都将不会在后续请求中刷新和再次检索。
更多配置参见源项目:https://github.com/apereo/person-directory
下面说一下属性解析的几个主要组件:
- 属性检索 核心接口:IPersonAttributeDao,不同Dao对应不同的解析器,比如ldap的解析器包含一个ldap的dao
- 属性缓存 CAS默认将属性缓存到SSO session中,即内存里,生命周期也跟随session
- 属性解析 核心接口:PersonDirectoryPrincipalResolver
- 属性合并/聚合 其实这两个操作可以看作为一个概念,配置见:https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#multimapped-attribute
属性发布
属性发布,就是哪些属性将发布到客户端服务
(或者说暴露给客户端,有点像我们写业务代码时的DTO的作用),
即客户端服务通过认证后,可以拿到哪些属性,它包含以下几个主要核心:
指定principalId
一般就是指 userId
### 属性发布协议(attribute release Policy)
默认发布的属性列表:https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#default-bundle,该配置支持重命名,写法如:user_id:uid,即将 user_id 重命名为 uid
支持的几种发布协议:
– return all
– deny all
– return allowed
– Rest:通过接口进行发布
– Return mapped:通过配置别名,来发布属性,而且只会发布这些配置别名的属性
具体配置:https://apereo.github.io/cas/5.3.x/integration/Attribute-Release-Policies.html
属性承诺
缓存属性
属性加密