门户平台身份认证 - 逻辑改造方案
前提说明
1、为什么要支持机构、身份、角色切换?
在系统实际的运行中,我们发现存在以下多身份,多角色,多机构
的情况:
- 多校区的学校,校长需要同时查看多个校区的数据
- 教职工,同时间在一个学校的多个校区担任任课教师,此教师同时具有
班主任
和任课教师
- 教职工,既是教师也是家长,就会同时具有
教师
和家长
的身份 - 家长,可能有多个孩子在不同的学校学习的情况
鉴于以上情况的出现,对系统的权限设计提出了较难的挑战。为了让系统能井然有序的运行,我们在权限设计的时候,选择了
机构 + 身份 + 角色
作为 用户在系统内可确定的权限划分主体进行逻辑判断。
在系统的这个权限设计下,用户登录时,将会默认发生以下的一些情况:
- 账号密码验证通过后,系统会默认选择一个编码较小身份类型作为
默认身份
- 账号密码验证通过后,系统会默认选择一个权重较高的角色作为
默认角色
- 账号密码验证通过后,系统会默认选择用户所属机构排序(按编号正序)靠前的第一个学校/校区作为默认的
学校/校区
说明:目前系统支持的身份类型(1:教师、2:学生、3:家长、4:开发者、5:普通用户、6:管理员)
综合系统实际运行中存在的情况以及系统以
机构 + 身份 + 角色
作为 用户在系统内可确定的权限划分主体进行逻辑判断, 就决定了在用户门户首页,系统需要实现 机构、身份、角色 的切换功能
2、支持机构、身份、角色切换后统一身份认证面临的困境?
在系统实际的运行中,我们发现以 机构 + 身份 + 角色
作为 用户在系统内可确定的权限划分主体进行逻辑判断, 结合 机构、身份、角色 的切换功能,在与三方系统的对接过程中,依然会存在 机构 + 身份 + 角色
不一致的情况,从而引起系统的功能权限控制异常,也给用户带来了不好的体验。
引发这种情况的原因有:
- Cas 统一身份认证平台 只能对账号进行授权认证,而不能区分当前登录账号的 机构、身份、角色
- 用户登录成功后,系统选择的默认 机构、身份、角色 在打开 三方应用 无法进行传递,导致三方系统无法确定从门户单点登录过来时,当前用户所使用的 机构、身份、角色
- 三方系统在从门户单点登录完成后,如果用户在门户进行了 机构、身份、角色 切换,三方系统无法感知
系统中家长角色的用户,登录系统的目的实际上目的是为了操作自己孩子的功能,如:填写报告单、完成任务。因为当前子系统(如:报告单、过程评价)的逻辑是使用学生自己的账号进行功能操作,这将导致单点登录时,因为账号主体是家长,而无法使用孩子的账号进行单点登录。
3、门户统一身份认证流程
解决方案
为解决当前多身份,多角色,多机构
下的统一身份认证面临的困境,需要对个人门户
和CAS统一身份认平台
进行一些功能改造以解决当前所面临的问题。
1、个人门户
需要进行的改造:1天(开发与测试)
- 1、改造 [个人门户] 现有的机构、身份、角色 切换逻辑,将变更后的 机构、身份、角色 放到Redis缓存中,此处需要更新缓存字段 orgId、identityId、roleId
- 2、改造 [个人门户] 现有的家长选择孩子 的逻辑,将变更后的 孩子信息 放到Redis缓存中,此处需要更新缓存字段 subAccount、subAccountId、subUserId、subOrgId、subSchoolCode、subGradeCode、subClassCode
2、CAS统一身份认平台
需要进行的改造:2天开发、1天测试
- 1、修改 [CAS统一身份认平台] 的登录方法,追加 扩展信息,扩展信息有:学校列表、角色列表、子用户列表,当前用户的 orgId、identityId、roleId、当前子用户信息 subAccount、subAccountId、subUserId、subOrgId、subSchoolCode、subGradeCode、subClassCode
- 2、修改 [CAS统一身份认平台] 的验票方法
/p3/validate
,实时获取Redis缓存中的 机构、身份、角色、子账号 信息 - 3、修改 [CAS统一身份认平台] 的 OAuth2.0 获取认证用户信息方法
/oauth2.0/profile
,追加 与登录接口返回相同的 扩展信息
3、业务中台
需要进行的改造:1天(开发与测试)
- 修改 [业务中台] 内部系统,获取 当前登录用户的 机构、身份、角色 信息 和 孩子信息的方法
4、三方系统
需要进行的改造:1天(开发与测试)
- 修改 [过程评价] 系统的 Auth 服务的 Cas 对接逻辑,从 Cas 单点返回的信息中获取 当前登录用户的 机构、身份、角色 信息 和 孩子信息,如果有 孩子信息则应以孩子的子账号进行单点登录
- 修改 [报告单] 系统的 Auth 服务的 Cas 对接逻辑,从 Cas 单点返回的信息中获取 当前登录用户的 机构、身份、角色 信息 和 孩子信息,如果有 孩子信息则应以孩子的子账号进行单点登录
改造后的流程示意图
作者:Jeebiz 创建时间:2024-04-17 13:46
最后编辑:Jeebiz 更新时间:2024-05-07 20:29
最后编辑:Jeebiz 更新时间:2024-05-07 20:29