身份和访问管理(IAM)初探 #
“ 就用本文为Workspace ONE Access系列开个头吧。”
01、什么是身份和访问管理(IAM) #
IAM=Identity and Access Management
什么是身份和访问管理?听起来高大上,其实非常好理解。
IAM就是一套安全架构,保证四个正确(Right)。
正确的人。
正确的资源。
正确的时间。
正确的理由。
用一句话串起来就算是正确的人在正确的时间,以正确的理由访问正确的资源。
其实Right这个词除了正确的意思外,还有刚刚好的意思。
你可能对IAM这个名词陌生,但你肯定用过。下面就让我们看看企业中常见的IAM。
02、企业中常见的身份和访问管理系统 #
企业中最常见的IAM其实就是下面这东西,AD或LDAP。
这里面存储了用户的身份。
当然,企业肯定还有一些Web应用、内部应用之类的,通常以AD/LDAP为基础做了SSO(单点登录)。
企业不可能全用内部应用,加上SaaS应用大量流行,所以就需要Identity Federation(联合身份认证)。这些应用都基于标准认证协议,所以集成起来非常简单。
到这一步,企业一般会引入MFA(多因子认证)了。
自动provisioning(置备)也就少不了了。基于目录或人事管理系统(HRMS),访问时自动把用户建出来。
最终,企业肯定少了监控/审计什么的,确保四个正确。
我们再来看看最常见的术语,非常容易混淆的两个。
Authentication(认证)
Authorization (授权)
Authentication缩写为AuthN,解决“你是谁”的问题,常用的方式有:
用户名密码
证书
多因子认证
Authorization缩写为AuthZ,解决“你能访问啥”的问题,这个比较容易理解,举个🌰:
你是销售部的一员,所以你能访问销售部目录下的文件。
这些都不是问题,但放大到真实环境,问题就出来了,尤其是随着应用日益增多。
每个应用在开发时首先考虑业务逻辑,接下来就要考虑用户数据库,认证逻辑,用户权限什么的。
对于开发来说,应用越来越多,最头疼的就是维护每一个应用,确保用户能使用。但是:
如果用相同的用户凭证,用户方便了,但很容易出现问题,只要一个应用用户数据库泄露,所有的应用都能登录了。
如果用不同的用户凭证,安全上有保证了,但用户会很头疼。试想一下:二十个应用二十个密码?
有人会说那我用证书,不就行了吗?
没错,但接下来你要修改二十个应用的架构,让他们一个个都支持证书认证。
而且如果有人离职了,还需要一个个应用取消授权。
开发,头疼。
用户,头疼。
管理员,头疼。
那么,怎么解决?我们就需要引入现代认证,基于声明(Claim)的认证方式。
03、现代认证-基于声明(Claim) #
首先我们先引入IDP的概念,也就是Identity Provider,身份提供商。
要使用基于Claim的认证模式,首先需要Application和IDP之间先建立信任关系。Application信任来自于IDP的Claim。
那么Application就负责之前的AuthN的部分,而是由IDP完成AuthN之后,发送给用户一个Claim/Access token。
用户就可以使用这个Claim/Access token访问Application啦。AuthZ的部分还是由Application来负责。
这套基于Claim的认证体系好处就在于可以同时服务多个Application。
这样大家都简单了。
开发:简单维护。
最终用户:只需登录一次。
管理员:简化用户管理。
我们来举个简单的🌰,让大家更好的理解什么叫基于声明的认证。其实我们身边例子很多,比如说坐飞机,你要先拿护照身份证之类的去柜台登记,领取登机牌。
柜台的工作人员会验证你的身份(AuthN),并提供登机牌(Claim)。
此时柜台就是IDP。
登机时你只需要出示登机牌(Claim)即可。因为登机口(Application)信任柜台(IDP)。
现在有多种check-in的方式,其实登机口(Application)可以信任多个IDP:柜台、自助柜台、Web打印。
那么信任是怎么建立起来的呢?这取决于使用的标准是什么,一般来说,需要:
交换证书(有些使用client ID+secret)。
登入、登出地址。
支持的参数和标准。
这些都会通过metadata的形式传递。
Claim里面同样也包含多种信息。
用户身份
用IDP证书签名
是否认证成功
认证的方式
用户属性(姓名、邮箱、用户组、参数等等)
Claim也是层层可以传递的!传递中IDP会生成新的Claim!这样即使Application只使用SAML协议的最后一个IDP也没有关系!
最后,让我们看一下AuthN常用的凭证:
你知道的,比如:密码,PIN码等等。
你拥有的,比如:智能卡,token,纳管的移动设备等等。
你是什么,比如:指纹,虹膜,面部特征等等。
多因子验证必须至少使用其中的两类,而不是一类里的两种。这样才更加安全。