一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
通常,我们的一个后台系统离不开三部分,sso 单点登录,acl 权限管理以及用户基础服务。
sso 负责登录认证。 acl负责权限管理,权限角色菜单授权等管理操作。 用户基础服务,就是负责用户信息录入,修改,封禁等等。
sso 系统可以分为三部分:
- 登录客户端
- 登录前端服务,负责接口串联,相当于控制层,可以有不同的语言实现,可以有会话管理与心跳保活
- 登录后台服务,体则提供凭证管理、身份认证、会话管理、应用接入
常见的流程为:
- 应用服务先检查用户是否登录,没有登录,跳转到登录页,直接对接 sso 服务
- 登录成功颁发 ticket,重定向到业务页面
- 业务页面发起请求,首先被应用服务捕获到,应用服务调用 sso 服务校验 ticket
- 校验通过,应用处理登录态(通常需要服务缓存一下,搞个失效时间),并响应应用请求
常见的问题是如何保活?通常需要发起保活请求,然后更新一下 ticket 为什么叫单点登录?如果应用没有本地的登录信息,可以调用 sso 服务,sso 服务会发现其实已经登录并带着应用跳回到新的应用,也就是说发现已经登录的情况不需要重新登录
acl 权限服务,常用的 rbac,即基于角色的权限控制。
acl 公认的安全原则:
- 最小特权原则:尽量把权限的粒度控制小
- 责任分离原则,角色互斥,动静职责分离
- 数据抽象原则,数据权限与数据模型进行抽奖
acl 的调用流程
- 发起请求
- 服务端发现资源需要有对应的权限,调用 acl 查看此用户有无权限
- 有权限返回成功,返回数据
- 无权限返回结果,要求用户申请权限