门户平台身份认证 - 逻辑改造方案

前提说明

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