IAM系统调研 记录下最近对业界开源 IAM 系统的调研, IAM: IdentityAccessManagement,简单来说就是用户身份标识与访问管理,通常涉及两个部分: 认证(Authentication): 通常会涉及到用户登录等操作,用于识别 你是谁 授权(Authorization): 识别身份后就是授权的过程,用于管理 你能做什么 认证( Authentication )与授权( Authorization ) 正常的访问中,我们都会涉及到两个阶段: 认证:你是谁 授权:你能干什么 认证 上面已经提到,所谓认证简单来说就是“你是谁”,无论是颁发凭据的一方还是校验的凭据的一方,都是基于这个目的而行动。 常见的认证手段有: 密码 验证码 生物识别(指纹,人脸) 证书 第三方平台(OAuth2, OIDC) 而常见的认证协议: Kerberos: 比较完全 LDAP: 轻量,还需要SASL去完善认证的流量 授权 授权是在认证之后识别出你能干什么,这里又分为两类知识: 授权模型:你怎么分配权限,通常用于系统资源的分配,比如某个用户是否具备某类资源的操作权限。 授权协议:你怎么授予他人使用自己的权限资源,通常用于 用户资源 在开放平台等场景使用, 常见的授权模型(复杂度逐步变高): ACL(Access Control List): 将一组访问权限授予某个账号,类似文件系统的权限 RBAC(Role Base Access Control): 类似 ACL,但是不再授予给账号,而是角色,最后再将角色和账号绑定,更为灵活。但是缺点也很明显,多了一个角色管理对象。 Zanzibar: 谷歌云平台的权限控制模型,建立了一种他们自己的DSL(Object, Subject, Relation, SubjectSet 等),非常灵活,但是有一定的认知成本。 ABAC(Attribute Base Access Control): 基于属性的控制,相比 RBAC 的区别在于授予权限的对象变成一类满足特定要求的账号,比如 某个属性大于 X 的账号,给予 Y 权限。该模式最为灵活,但是配置太过复杂,因此业界几乎没用使用。 常见的授权协议有: