身份和访问管理(IAM)初探 #

作者:莫得感情的搬运工 丨 2020-07-10

“ 就用本文为Workspace ONE Access系列开个头吧。”

01、什么是身份和访问管理(IAM) #

IAM=Identity and Access Management

什么是身份和访问管理?听起来高大上,其实非常好理解。

IAM就是一套安全架构,保证四个正确(Right)。

正确的人。

正确的资源。

正确的时间。

正确的理由。

用一句话串起来就算是正确的人在正确的时间,以正确的理由访问正确的资源。

其实Right这个词除了正确的意思外,还有刚刚好的意思。

你可能对IAM这个名词陌生,但你肯定用过。下面就让我们看看企业中常见的IAM。

02、企业中常见的身份和访问管理系统 #

企业中最常见的IAM其实就是下面这东西,AD或LDAP。

这里面存储了用户的身份。

blockchain

当然,企业肯定还有一些Web应用、内部应用之类的,通常以AD/LDAP为基础做了SSO(单点登录)。

blockchain

企业不可能全用内部应用,加上SaaS应用大量流行,所以就需要Identity Federation(联合身份认证)。这些应用都基于标准认证协议,所以集成起来非常简单。

blockchain

到这一步,企业一般会引入MFA(多因子认证)了。

blockchain

自动provisioning(置备)也就少不了了。基于目录或人事管理系统(HRMS),访问时自动把用户建出来。

blockchain

最终,企业肯定少了监控/审计什么的,确保四个正确。

blockchain

我们再来看看最常见的术语,非常容易混淆的两个。

Authentication(认证)

Authorization (授权)

Authentication缩写为AuthN,解决“你是谁”的问题,常用的方式有:

用户名密码

证书

多因子认证

Authorization缩写为AuthZ,解决“你能访问啥”的问题,这个比较容易理解,举个🌰:

你是销售部的一员,所以你能访问销售部目录下的文件。

这些都不是问题,但放大到真实环境,问题就出来了,尤其是随着应用日益增多。

每个应用在开发时首先考虑业务逻辑,接下来就要考虑用户数据库,认证逻辑,用户权限什么的。

对于开发来说,应用越来越多,最头疼的就是维护每一个应用,确保用户能使用。但是:

如果用相同的用户凭证,用户方便了,但很容易出现问题,只要一个应用用户数据库泄露,所有的应用都能登录了。

如果用不同的用户凭证,安全上有保证了,但用户会很头疼。试想一下:二十个应用二十个密码?

blockchain

有人会说那我用证书,不就行了吗?

没错,但接下来你要修改二十个应用的架构,让他们一个个都支持证书认证。

而且如果有人离职了,还需要一个个应用取消授权。

开发,头疼。

用户,头疼。

管理员,头疼。

那么,怎么解决?我们就需要引入现代认证,基于声明(Claim)的认证方式。

03、现代认证-基于声明(Claim) #

首先我们先引入IDP的概念,也就是Identity Provider,身份提供商。

要使用基于Claim的认证模式,首先需要Application和IDP之间先建立信任关系。Application信任来自于IDP的Claim。

blockchain

那么Application就负责之前的AuthN的部分,而是由IDP完成AuthN之后,发送给用户一个Claim/Access token。

blockchain

用户就可以使用这个Claim/Access token访问Application啦。AuthZ的部分还是由Application来负责。

blockchain

这套基于Claim的认证体系好处就在于可以同时服务多个Application。

blockchain

这样大家都简单了。

开发:简单维护。

最终用户:只需登录一次。

管理员:简化用户管理。

我们来举个简单的🌰,让大家更好的理解什么叫基于声明的认证。其实我们身边例子很多,比如说坐飞机,你要先拿护照身份证之类的去柜台登记,领取登机牌。

blockchain

柜台的工作人员会验证你的身份(AuthN),并提供登机牌(Claim)。

blockchain

此时柜台就是IDP。

登机时你只需要出示登机牌(Claim)即可。因为登机口(Application)信任柜台(IDP)。

blockchain

现在有多种check-in的方式,其实登机口(Application)可以信任多个IDP:柜台、自助柜台、Web打印。

blockchain

那么信任是怎么建立起来的呢?这取决于使用的标准是什么,一般来说,需要:

交换证书(有些使用client ID+secret)。

登入、登出地址。

支持的参数和标准。

这些都会通过metadata的形式传递。

Claim里面同样也包含多种信息。

用户身份

用IDP证书签名

是否认证成功

认证的方式

用户属性(姓名、邮箱、用户组、参数等等)

Claim也是层层可以传递的!传递中IDP会生成新的Claim!这样即使Application只使用SAML协议的最后一个IDP也没有关系!

blockchain

最后,让我们看一下AuthN常用的凭证:

你知道的,比如:密码,PIN码等等。

你拥有的,比如:智能卡,token,纳管的移动设备等等。

你是什么,比如:指纹,虹膜,面部特征等等。

多因子验证必须至少使用其中的两类,而不是一类里的两种。这样才更加安全。