身份管理系统(IDM)分析
表1 认证机制对比分析
HTTP Basic Auth | 数字签名/数字证书 | OAuth协议方式(Token) | SSO(Token) | |
实现方式 | 客户端在发送之前是以用户名追加一个冒号然后串接上口令,并将得出的结果字符串再用Base64算法编码。例如,提供的用户名是Aladdin、口令是open sesame,则拼接后的结果就是Aladdin:open sesame,然后再将其用Base64编码,得到QWxhZGRpbjpvcGVuIHNlc2FtZQ==。最终将Base64编码的字符串发送出去,由接收者解码得到一个由冒号分隔的用户名和口令的字符串。 | 为每个接入方分配一个密钥,并且规定一种签名的计算方法。要求接入方的请求中必须加上签名参数。同时为防范Replay***,需要在请求中添加时间戳。 | OAUTH认证授权有三个步骤,概括为: 1. 获取未授权的Request Token; 2. 获取用户授权的Request Token; 3. 用授权的Request Token换取Access Token。 当应用拿到Access Token后,就可以有权访问用户授权的资源了。 | 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。 |
适用范围 | 适用于HTTP协议的请求。 | 适用于REST/SOAP接口。 例如:AWS REST/SOAP API。 | OAuth协议适用于为外部应用授权访问本站资源的情况。其中的加密机制与HTTP Digest身份认证相比,安全性更高。需要注意,OAuth身份认证与HTTP Digest身份认证之间并不是相互取代的关系,它们的适用场景是不同的。OAuth协议更适合于为面向最终用户维度的API提供授权,例如获取隶属于用户的微博信息等等。如果API并不是面向最终用户维度的,例如像七牛云存储这样的存储服务,这并非是OAuth协议的典型适用场景。 | 适用于不同网页或应用之间,不需要用户重复输入用户名密码的场景。 |
优点 | 简单,容易理解和实现。 基本上所有流行的网页浏览器都支持基本认证。 | 简单,容易理解和实现。 | 在使用中,OAuth不会使第三方网站或应用接触到用户的帐号信息(如用户名与密码),授权后的http通信中也不再传输用户信息而是以数字签名和访问令牌(AccessToken)取代,即使截到数据包,也无法还原出用户的登录信息。这是OAuth最大的优点,也是它得以逐渐成为现在通用的授权标准的原因。 | 改善系统易用性。对于终端用户使用非常方便。只需记录一组用户名和密码,而且只需输入一次。 提高系统开发效率。对于开发人员来说,在一个好的SSO构架中身份验证框架只有一个,各应用系统开发人员可以专注于业务逻辑,无须自己再设计身份验证程序。 简化管理员管理。对于系统管理员,有了SSO,用户的账户和管理系统都只有一套,管理方便,减少负担。 |
缺点 | 虽然基本认证非常容易实现,但该方案建立在以下的假设的基础上,即:客户端和服务器主机之间的连接是安全可信的。特别是,如果没有使用SSL/TLS这样的传输层安全的协议,那么以明文传输的密钥和口令很容易被拦截。该方案也同样没有对服务器返回的信息提供保护。 | 需要承担安全保存密钥和定期更新密钥的负担,还要注意防范replay***。而且不够灵活,更新密钥和升级签名算法很困难。如果请求中添加时间戳,需要保证客户端和服务端时间同步。 | OAuth作为一个授权协议,而不是一个认证协议,OAuth提供的是权限分配而非认证,授权本身的实质相当于系统为第三方网站/应用开了一个后门,而你的授权就是允许它们可以走后门进来获取你的隐私资料和使用权限。 详见:http://www.oschina.net/news/31399/oauth30-road-to-hell | 遭受******后的危害较大。因为身份验证系统集中,如果***攻破这一系统,意味着可以危害整个应用系统体系;窃取某一用户在某个系统中的用户名和密码,就可以窃取该用户在该SSO体系中所有系统中的资源。 忘记锁定个人桌面的信息泄露。如果用户忘记锁定电脑,被他人看到,则该用户在整个系统中的信息都将被泄露。对比多次登录的系统,同样的情况下,可能只有某个子系统的特定类型数据会被泄露。 |
表2 ForgeRock开源IDM、AM产品分析
OpenIDM | OpenAm | OpenDJ | |
功能 | 用户管理功能,包括:用户身份周期管理、用户和组管理、密码管理、角色管理、权限管理、策略管理、认证和授权、同步功能等核心功能。 并提供REST接口进行管理。 OpenIDM的用户数据可以同步到OpenDJ。 | OpenAM 是一个领先的开源认证、授权的产品,可用于替换即将被取消的OpenSSO。 OpenAM 提供核心的标识服务用来简化实现在一个网络架构中的透明单点登录,包括集中式或者分布式的单点登录。主要的特性有: ·完全符合开源AAA产品; ·AAA协议:计算机安全领域的协议,AAA指:鉴权,授权,计费(Authentication, Authorization, Accounting); ·简单易用、易配置; ·纯Java开发; ·可轻松配置联合认证系统,并集成到已有项目中。 并提供REST接口进行管理。 | 提供LDAP服务,并提供REST接口进行方便的管理。 |
角色 | IDM(用户身份管理) | SSO(单点登录) | LDAP(轻型目录访问协议) |
适用范围 | 用户管理。 | 主要适用于单点登录(SSO)的应用场景。 | LDAP应用。 |
认证机制 | 客户端进行认证的时候,向OpenIDM提供用户名密码(明文传输),OpenIDM进行认证并返回认证结果。 | OpenAM提供的认证机制主要是用户登录功能,用户在接口中提供用户名密码,OpenAM验证成功之后会返回一个TokenId,用于后续的SSO步骤。 | 提供标准的LDAP认证机制。 |