「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。
为了保证系统的安全性,通常我们需要对访问用户进行认证,对资源进行授权。如何进行认证与授权? 认证可以通过 json web token 实现,授权比较复杂,他们都可以通过 IAM 系统实现。
IAM(identity and acess management)认证与访问管理系统,提供了访问控制的功能,可以决定谁能够对什么资源进行哪些操作。
IAM 如何进行资源授权?可以分四步:
- 用户通过用户名/密码等唯一身份标示来访问 IAM 系统,完成认证。
- 创建密钥对,用来作为授权的标示
- 创建授权策略,iam 通过授权策略完成授权
- 请求 iam 提供的授权接口,iam 会根据用户的请求内容和授权策略决定授权请求是否被允许
可以看到 iam 中最关键的有三种系统资源:用户,密钥和策略。
整体的使用流程如下,主要分为四步:
- 用户通过客户端请求 iam-apiserver 完成对用户、密钥、授权策略的创建,server 将这些数据存储在 mysql 数据库中
- 用户可以通过请求 iam-authz-server 查询资源的授权策略,决定资源请求是否被允许,为了提高获取授权的速度,可以将密钥和策略信息缓存到内存中。需要注意的是密钥和策略信息需要跟 api-server 保持同步
- iam-authz-server 将授权日志上传到 redis 缓存中,iam-pump 异步消费这些日志,把清理后的数据保存到 mongodb 中,供运营系统查询
- 运营平台授权数据展示,通过运营系统,可以看到用户的授权信息,失败原因等,也可以直接调用 iam-apiserver 进行一些上帝视角的运营工作
整体可以采用 mvc 架构实现功能,将视图抽离出来,通过 ajax 连接 controller 层,最终访问后端的负责处理数据逻辑的 model 层。这样可以通过 controller 层将 model 层和 view 层解耦。