ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

统一用户身份管控与认证平台建设方案:账号同步、单点登录与鉴权落地

统一用户身份管控与认证平台建设方案:账号同步、单点登录与鉴权落地 简介一份面向政务及企业IT架构设计与安全运维场景的系统建设方案聚焦统一用户身份管控与认证平台的规划落地。方案从整体架构出发阐述由认证数据、认证服务中心、业务子系统组成的大数据身份管控平台并梳理系统管理、配置管理、认证鉴权服务等功能架构为读者提供可参考的顶层设计思路。资源包内仅含1个PDF文档共19页约2.42MB轻量易查阅。文档重点解析认证鉴权服务能力覆盖用户、票据、应用、角色、权限、区域与组织机构6大类共28个能力接口并给出账号同步对接方案包括通过Kafka监听新建账号消息并推送、历史存量账号批量导入及账号前缀去重规则有助于理解统一授权、单点登录及分级鉴权的实施要点。此外内容还涉及日志管理、IP黑白名单、基础权限管理等系统设置可作为政务云或企业权限中台建设的参考资料。目前已有210人学习下载适合需要建设或改造统一身份认证体系的技术人员、架构师及项目管理人员。1. 统一用户身份管控与认证平台先解决“账号一堆、密码一堆”的问题政务侧的信息系统多账号体系各管各的内容报送系统一套账号、审批系统一套账号密码规则五花八门。用户记不住账号密码管理员更头疼的是人走了账号还留在系统里权限也常常忘记回收。这份 19 页的统一用户身份管控与认证平台建设方案目标就是把分散的账号收敛成一套体系统一用户管理、统一认证中心、单点登录、集中授权与分级授权。架构师可以看它的数据模型和责任域设计研发可以看 6 大类服务 28 个能力接口怎么对接项目经理可以直接把里面的账号同步和切换准备步骤拿来做排期。方案采用认证数据、认证服务中心、业务子系统三层结构结合 Kafka 消息监听和账号前缀规则把新建账号和存量账号打通。这个思路在多系统并存、内外网隔离的政务场景里很实用后面几个章节我会把架构、接口、账号迁移和踩坑点拆开讲。2. 整体架构拆解认证数据、认证服务中心、业务子系统怎么分工2.1 三部分分工谁存数据、谁做服务、谁接流量方案里给出的整体架构分三层认证数据、认证服务中心、业务子系统。我第一次接触时有点困惑因为里面没有把“统一门户”单独画层后来重新梳理才明白门户属于业务子系统这一层它消费的是认证服务中心的能力而认证数据是底层所有账号、角色、权限的基准库。认证数据这层存放的是核心主数据包括行政区域、机构、员工、应用、角色、权限、资源。注意各业务系统自己的业务数据不会进这个库这里只回答几个问题你是谁、你在哪个组织、你能开哪些应用、你有哪些角色和权限。方案把行政区域和机构分开维护行政区划调整时不用动机构树责任域单独建模目的是在同一个机构下切出多个管理边界这直接服务于建设目标里的“管用审”集中授权与分级授权。认证服务中心承担两类核心动作数据同步服务和统一鉴权服务。数据同步服务负责把账号、角色、权限、资源的变化推给各业务系统统一鉴权服务在用户访问时实时校验角色、权限和资源。业务子系统就是统一门户和各业务应用的集合用户从统一入口登录门户完成认证和跳转业务系统自己处理业务逻辑。理解这三层的关键在于数据流方向账号和权限的变更从认证数据层出发经过认证服务中心最终到达业务子系统。业务子系统不能直接连认证数据库一切变更和校验都经由接口完成。反过来说业务系统想绕开接口直接改库里的账号数据是这套架构最忌讳的事联调阶段一定要盯住这个点。2.2 认证数据模型责任域、组织、用户、角色、权限、资源怎么关联方案里的数据模型不是一张表而是一组相互关联的实体包括行政区域、机构组织、用户组、用户、角色、权限、操作、资源。从字段定义能看出设计意图角色实体有角色标识、角色编码、角色名称、角色类型责任域、角色描述、所属组织、所属行政区域权限实体有权限标识、归属应用、资源类型、资源名称、操作标识只读/可写/执行、责任类型操作实体定义了菜单编码、菜单名称、应用、层级、顺序、责任域。我给这套模型梳理过一张通用对照表对接时按这个表去核对字段基本不会乱实体 | 关键字段 | 作用 用户 | 账号、关联机构、所属行政区域 | 统一账号可关联多个机构 角色 | 角色编码、角色类型责任域、所属组织 | 一组权限的集合可授权给用户 权限 | 归属应用、资源类型、操作标识只读/可写/执行 | 应用内具体能力描述 操作 | 菜单编码、菜单名称、应用、层级、顺序 | 菜单和功能入口挂在权限上 资源 | 应用内资源列表 | 被鉴权保护的对象这里最容易忽略的是“责任域”。角色类型和责任类型都带责任域实操上可以理解为“数据的归属边界”。同一个“审核员”角色在一级单位管全市数据在区级单位只管本区数据。如果没有责任域概念要么做很多套重复角色要么权限模型根本撑不住分级授权。方案把它作为独立字段而不是写死在业务逻辑里就是为了能配置、能扩展。另一个值得注意的设计是“操作”和“权限”分离。操作描述的是菜单和功能权限描述的是“谁能对某个资源执行哪些操作”。这样拆分后业务系统新增一个菜单不需要重新建模只要挂上对应的操作标识再去分配权限即可功能迭代不会反向破坏统一的权限结构。2.3 统一鉴权与自鉴权两种接入方式怎么选方案把鉴权方式分成两类统一鉴权和自鉴权。统一鉴权下外系统通过身份管控平台的实时接口校验用户、角色、权限、资源等信息自鉴权下外系统先通过离线接口把账号、角色、权限、资源同步到本系统由本系统自己完成鉴权。两种方式对比接入方式 | 数据交互 | 鉴权位置 | 适用场景 统一鉴权 | 实时调用平台接口 | 平台侧 | 业务系统权限逻辑简单能接受网络依赖 自鉴权 | 离线同步数据到本地 | 业务系统本地 | 业务逻辑复杂需要本地快速判断选型上我的习惯是新建的业务系统、权限模型不复杂、对实时性有要求的走统一鉴权。存量系统改造尤其内部权限判断写得很深的优先考虑自鉴权因为它只需要把数据同步做好业务代码改动量最小。方案里特别提到自鉴权外系统通过身份管控平台离线接口同步用户、角色、权限、资源等信息到本系统由本系统实现鉴权这说明自鉴权和统一鉴权共享同一份同步链路两者的区别只在“鉴权判断发生在哪一侧”。还有一点容易被忽略自鉴权系统如果没有收到增量同步的账号更新权限判断就会跟平台不一致。所以选自鉴权的系统必须配套数据稽核手段。从方案整体看统一鉴权是主线自鉴权是给“改不动老系统”留的口子这个度要在项目初期就定死否则每个系统都想省事走自鉴权平台就退化成一个账号数据源失去了集中管控的意义。3. 认证鉴权服务6大类28个接口怎么对接单点登录链路怎么走3.1 六大服务能力拆解接口清单与调用语义能力清单是这份方案里比较硬核的部分。认证鉴权服务能力覆盖用户服务、票据服务、应用服务、角色服务、权限服务、区域与组织机构服务 6 大类合计 28 个能力接口。我按业务动作重新归了一下类服务类别 | 提供的接口能力 | 典型用途 用户服务 | 登录地址、登出、获取用户列表、获取用户信息、修改邮箱/手机号/昵称/密码 | 账号信息维护、登录入口 票据服务 | 获取一次性票据、获取登录令牌 | 单点登录票据流转 应用服务 | 应用列表、应用资料、应用内资源列表、平台资源列表、单个资源信息、权限鉴权、跳转重定向路径 | 应用注册、资源查询、跳转 角色服务 | 根据各种条件获取用户角色列表 | 菜单过滤和组织架构展示 权限服务 | 根据各种条件获取用户权限列表 | 功能级、接口级鉴权 区域与组织机构服务 | 获取区域列表、组织机构列表 | 同步行政区划和组织架构用户服务里把“修改邮箱、修改手机号、修改昵称、修改密码”都做成外部接口这个设计在政务场景里很实用。业务系统经常需要在自己页面里改用户资料如果每个系统都直连用户表账号数据立刻会散掉统一走用户服务接口改完的数据回到平台其他系统再通过同步链路拿到变更。应用服务和权限服务是鉴权主路径。应用服务里有权限鉴权和跳转重定向路径两个能力一个管“允不允许进”一个管“进去之后跳哪里”在统一门户单点登录场景里是两个必须打通的接口。角色服务和权限服务在接口语义上有重叠对接时容易混淆我建议这样区分角色服务回答“用户有哪些角色编号”面向菜单和角色管理权限服务回答“用户在指定应用、指定资源上有没有某类操作权限”面向按钮级和接口级鉴权。先想清楚当前调用是拿角色还是判权限再去选接口。3.2 单点登录链路一次性票据与登录令牌怎么流转票据服务在 6 类服务里看着简单只有获取一次性票据、获取登录令牌两个接口但整个单点登录能不能成立就看这两个接口。一次典型的登录流程是这样的用户在统一门户输入账号密码加文字验证码完成登录沿用门户登录认证设计门户保留登录令牌用户点击某个业务系统入口门户携带令牌调用票据服务获取一次性票据业务系统拿着票据向认证服务中心校验并换取本系统登录令牌校验通过后跳转到应用首页后续通过用户服务、权限服务等接口获取用户信息和权限点。方案还提到在账号密码加文字验证码的基础上提供账号密码加短信验证码的功能这对应认证方式管理的演进。票据换取这一步的接口请求常见做法是类似这样# 用登录令牌换一次性票据appId 是业务系统在平台上注册的应用标识 curl -X POST https://idp.example.com/api/ticket/acquire \ -H Content-Type: application/json \ -d {loginToken: T-8F3A9C..., appId: content-report}loginToken 是用户在统一门户登录后拿到的登录令牌appId 是接入系统的唯一标识在平台上注册应用时分配。返回的一次性票据短时有效业务系统拿到后要去票据验证接口换取本应用的登录令牌。这里要注意一次性票据不能当长期凭证到处传它的设计目标就是一次性使用令牌的失效时间要和平台约定好才能保证会话超时后用户能重新走门户登录而不是停留在某个系统里的死会话。这个链路最大的价值是所有业务系统都不再自己维护密码认证登录入口收敛到统一门户。后续接入新系统时只需要在平台上注册应用并配置跳转路径不需要关心密码存储和会话实现。政务场景里系统多、厂商多这个收益在项目后期会越来越明显。3.3 配置管理里容易被忽略的三件事密码策略、黑白名单、会话管理功能架构图里配置管理包含系统设置、字典管理、IP 黑白名单、基础权限管理等模块。从实战角度看有几个配置项必须在联调前确定下来不要等出了问题再补。第一件是密码策略。方案在用户密码修改及锁定部分写得很明确一天内输错 6 次密码会将用户自动锁定 30 分钟30 分钟后自动解锁也可以手动解锁。这个“6 次/30 分钟”是平台级参数联调时如果测试脚本在一个循环里反复用错误密码登录账号很快会被锁排查时容易被误判成认证接口故障。第二件是 IP 黑白名单。如果平台启用了白名单各业务系统调接口的服务器 IP 没加进去联调时就是各种超时和拒绝访问。这类问题最隐蔽因为接口路径对、参数对、令牌也对但就是调不通先查网络访问控制是最快的排查路径。第三件是会话管理。认证引擎会维护用户登录会话会话超时时间、并发会话数量这些参数需要和各业务系统的使用习惯对齐。政务用户很多是上班开电脑一直挂在系统里会话超时设置太短会频繁被踢出登录设置太长又会放大安全风险。另外日志管理和系统监控也属于这一层。日志建议区分认证日志和授权日志方便事后排查“用户到底有没有登录成功、鉴权失败发生在哪一段”。联调阶段就把日志级别调低、输出完整参数上线前再收紧不然出了问题只能靠猜。4. 账号同步方案新建账号走 Kafka存量账号打前缀批量导入4.1 新建账号消息推送链路Kafka 消费端怎么写方案里的对接方案写得很明确管理员基于政务门户新建账号并基于政务门户发布订阅消息实现账号信息的推送各应用子系统通过 Kafka 监听政务门户推送的账号信息及时完成账号对接入库。注意新建账号的消息源是政务门户身份管控平台和业务系统都作为消费方监听 Kafka 上的账号变更事件。这条链路的时序可以归纳为四步管理员在门户创建账号并关联机构门户把账号信息封装成消息发布到 Kafka各业务系统监听订阅的主题并解析消息体业务系统将账号写入本地用户表完成入库。如果创建账号后还需要绑定角色通常在第二、第三步之间追加角色授权消息。消息消费端的一种实现写法如下from kafka import KafkaConsumer import json consumer KafkaConsumer( user.account.sync, # 订阅主题实际以门户发布的 topic 为准 bootstrap_servers192.168.x.x:9092, # 政务内网 Kafka 集群地址 group_idcontent-report-sync, # 消费组相同 group_id 下不会重复消费 enable_auto_commitFalse, # 关闭自动提交防止入库失败丢消息 auto_offset_resetearliest, # 从头消费用于初次接入补数据 consumer_timeout_ms30000 # 30 秒没有消息则主动断开 ) for msg in consumer: data json.loads(msg.value.decode(utf-8)) # 约定消息体至少包含 username、orgCode、appId、status sync_user(data) # 入库前先按 appId 过滤确保是发给本系统的 consumer.commit()这段代码里enable_auto_commitFalse 是关键配合手动 commit避免“消息已经消费但没有成功入库”的丢数据问题auto_offset_resetearliest 的意义在于新接入的消费组可以从最早的消息开始补拉初次联调或重新初始化时兜底能力更强。按 appId 过滤也很重要Kafka 主题往往是多业务系统共用的消息体里不只有发给自己的账号数据。实际落地时还要对齐消息格式、topic 命名和异常重试策略。我的建议是消息体里带上事件类型比如新增、修改、锁定、解锁业务系统用一个处理通道统一分支处理比给每种操作建一个主题更省事。消息消费失败时补个定时任务做对账能解决大部分偶发丢消息的问题。4.2 历史存量账号批量导入前缀规则与回跳全匹配新建账号可以靠 Kafka 增量同步但子系统里已经存在的存量用户怎么办方案给的做法是批量导入一次性把历史存量账号汇总后转至政务门户系统。这里有一个很关键的前缀规则为避免导入账号和已有账号重复采用“系统标识原有账号”的规则在统一门户生成新账号。方案里举的例子是原内容报送系统账号 aaa初始化至统一门户时新建账号 NRBS-aaa用户经由统一门户跳转至内容报送系统时将前缀 NRBS- 截去定位到原账号 aaa实现账号全匹配和统一鉴权。对应关系用表格表达更直观源系统账号 | 统一门户账号 | 回跳时使用的账号 | 鉴权方式 aaa | NRBS-aaa | aaa | 去掉前缀后全匹配前缀规则的价值体现在三个方面第一避免不同系统之间的账号碰撞每个系统账号前有独立标识不会出现两个系统同名用户互相覆盖第二保留来源可追溯性看到 NRBS- 前缀就知道这个账号源自内容报送系统导入数据出问题时能快速回溯源头第三回跳时截掉前缀源系统内部账号关联关系不用变业务系统不需要为接入门户改动自己的账号主键。落地时有一个细节容易疏忽前缀是“系统标识原有账号”的组合组合后的账号长度可能超出源系统账号字段的长度限制。导入前一定要梳理一遍源系统账号命名规范有没有超长账号、有没有包含特殊字符的账号提前做好清洗规则。还有一点批量导入不只是导账号用户与机构的关联关系要一起导否则账号导入成功用户在业务系统里还是孤立的权限也挂不上去。方案里鉴权能力输出的描述是“去掉前缀账号全匹配统一鉴权”所以导入后最重要的验证动作就是确认截掉前缀之后能否精确匹配回源系统账号。4.3 切换前的数据稽核与全量初始化方案里切换工作准备列了五个环节接口功能改造联调、历史账号数据检查、同步历史数据、防火墙策略、全量数据初始化。其中数据一致性是最容易翻车的环节。数据稽核要盯这几个点账号数量核对按系统统计源系统和统一门户的账号数是否一致状态核对账号锁定状态、有效无效状态是否和源系统一致角色权限核对批量导入后用户角色和权限点是否完整机构关联核对账号是否挂在正确的机构下前缀规则核对截掉前缀后能否全匹配回源账号。全量数据初始化一般安排在切换窗口内做先导出全部账号及组织关系再按批次导入导入完成后立即做一次全量比对。不要只跑一遍初始化就收工推荐的做法是初始化后间隔几分钟再跑一遍差异比对把初始化过程中新产生的新建账号也纳入比对范围避免“倒完了又冒出来一批增量”的尴尬情况。注意全量初始化前先在一套测试环境完整演练一遍再把同一批脚本搬到生产环境执行。生产环境直接跑新脚本是所有数据迁移事故的共同特征。5. 落地避坑统一身份管控平台最常见的五个翻车点5.1 机构上报后不可编辑改起来要等流程走完现象机构信息新增或修改后点击上报时发现机构变成不可编辑状态业务人员以为系统坏了。 原因方案里写得很清楚“申请上报后该机构不可编辑”。这是状态机约束目的是保证上级审批时数据是冻结的防止审批过程中机构信息被偷偷改掉。 解决管理员在数据上报前先把所有机构信息校对完包括统一社会信用代码、行政区域、机构名称、上级机构。统一社会信用代码是必填项固定 18 位上报和编目都需要正确的代码。确实要改的话得走撤回或驳回流程等上级驳回后才能再次编辑。这个限制不是 Bug是流程不要试图直接改库绕过不然两边数据状态会脱节。5.2 密码连错 6 次账号被锁 30 分钟现象联调期间测试脚本循环跑登录用例跑着跑着账号直接被锁登录接口报“账号被锁定”。 原因平台默认启用了密码锁定策略一天内输错 6 次密码自动锁定 30 分钟。测试脚本在一个循环里用错误密码模拟登录很快就触发锁定阈值。 解决测试环境和联调环境的锁定阈值和平台管理员沟通后单独调高或者用一个专门的联调账号不受真实用户策略干扰。线上环境严格执行这个参数不建议放宽。另外要提醒业务方30 分钟后会自动解锁也可以由管理员手动解锁不用急着重置密码。5.3 Kafka 消费了但入库失败自动提交导致账号丢失现象账号在统一门户建好了业务系统里查不到Kafka 消费端日志也没有异常。 原因消费端如果开启了 enable_auto_commit消息拉到本地后 Kafka 会自动提交 offset而这个时候入库可能失败消息就相当于丢了。日志层面看不到报错因为消费过程本身是成功的。 解决消费端关闭自动提交入库成功后再手动 commit。另外业务系统入库时要先按 appId 过滤确认这条消息确实属于自己否则会把别的系统的账号存进自己库里。对账定时任务也是必需品每天比对一次门户账号数和本地账号数差异直接告警。5.4 存量账号导入后回跳匹配不上业务登录失败现象历史账号批量导入完成用户从统一门户跳进业务系统业务系统提示找不到用户登录失败。 原因回跳时去掉了前缀但源系统内部保存的不一定是原账号或者导入时对账号做了去空格、改大小写导致全匹配失败。方案里说的“去掉前缀账号全匹配统一鉴权”听起来简单实际数据质量不过关就会卡在这一步。 解决导入前先抽几个有代表性的账号做全链路验证覆盖“门户登录→跳转→去掉前缀→业务系统鉴权”整个过程。如果业务系统允许在本地用户表加一列保存原账号回跳时按这列匹配不再依赖字符串截断。数据清洗规则要先定死比如是否统一转小写、是否去掉首尾空格源系统和目标系统两边要用同一套规则。5.5 防火墙策略没放行Kafka 监听全程静默失败现象业务系统 Kafka 消费端一直连不上日志没有明显报错消息也没消费现场排查很久找不到原因。 原因方案里有一条是“防火墙策略身份管控访问统一门户 MQ”要求提前在两边放行相应端口。实际项目中身份管控平台要访问统一门户的 MQ消费端和 broker 之间的网络没打通进程表现是“看起来活着实际收不到数据”。 解决端口放行要提前和网络管理员对齐把 Kafka 的 broker 地址、端口、消费组网段一并提交。联调前先用 telnet 或 nc 测一遍 broker 端口连通性不要等日志报异常再排查。这类网络问题往往不是开发能解决的越早拉上网络管理员越好。提示上面五个问题里Kafka 丢消息和防火墙没放行占了我经历过的项目故障的大头。切换前把这两项单独列为检查点比临时排查省心得多。6. 切换工作准备与上线验证从联调到数据核对这五步不能省方案把切换工作准备概括为接口功能改造联调、历史账号数据检查、同步历史数据、防火墙策略、全量数据初始化五步。我在实际项目里还会在动工前加一道工序把所有业务系统的角色编码、权限点内容导出来和平台侧逐一比对确保两边角色有明确映射表。不做这一步切换完就会发现应用内角色权限全乱用户在门户能看到应用点进去却什么都干不了。具体实施顺序建议这样排联调阶段先跑通单点登录链路、用户服务接口、鉴权接口确认跳转重定向闭环随后停在历史账号数据检查上重点看账号状态、锁定状态、角色完整性、机构关联接着做同步历史数据选夜间低峰执行跑完出差异报表同一窗口把防火墙策略和 IP 白名单加好测试 Kafka 和接口连通性最后做全量数据初始化在停服窗口内完成倒库、比对、修复直到两边数据一致。上线验证我每次都会强制走一遍这五个检查项验证项 | 验证方法 | 预期结果 统一门户登录 | 真实账号走一遍登录流程 | 登录成功能进入所有已接入应用 业务系统跳转 | 从门户逐一点击各应用入口 | 跳转路径正确无死循环 鉴权拦截 | 用无权限账号访问受限资源 | 明确被拦截返回无权限提示 账号状态同步 | 修改密码、锁定、解锁账号 | 事件实时同步到各业务系统 Kafka 消息链路 | 新建一个测试账号观察消费日志 | 无积压、无重复消费、各系统均入库这份方案 PDF 里没有太多理论空谈大量细节点需要你对照自己系统的现状去套。我经历过的一版切换就是在存量账号导入时跳过了前缀规则校验结果回跳匹配失败最后全员加班回滚重导从那以后每次做这类切换我都强制走一遍上面的验证清单先小批量试点再全量执行效果稳定了很多。希望这份拆解能在你评估和落地统一用户身份管控与认证平台时帮到你。本文还有配套的精品资源点击获取
返回列表