身份认证是API安全的基础,在互联网上,网络环境的复杂多样导致API的存在状态也是多种多样的。要确保API使用的可信可控,使用身份认证技术是最简单、高效的选择。
在身份认证技术的使用中,基于API使用者身份的不同,将API身份认证技术划分为基于用户身份的认证技术和基于应用程序身份的认证技术。
- 基于用户身份的认证技术是指API的使用者为某个具体的自然人用户,其身份认证过程依赖于用户身份的认证过程,通过确定用户身份来确认API使用者的可靠性。
- 基于应用程序身份的认证技术是指API的使用者不是自然人用户,而是另一个API或应用程序。其身份认证过程依赖于对API或应用程序身份的认证来确认使用者的可靠性。
这两种认证方式,大体相对应三种API类型,用户参与型API对应基于用户身份的认证技术,而程序调用型API和IoT设备型API对应于基于应用程序身份的认证技术。
在基于用户身份的认证技术中,API的安全设计与其他Web应用并无差别,其认证方式主要有用户名/密码认证、动态口令、数字证书认证、生物特征认证等。随着互联网的发展,人们对安全性的要求越来越高,这些认证方式已经很少单独使用,目前使用最多的是双因子认证(2FA)或多因子认证(MFA),即将两种或多种认证方式组合起来使用,以提高应用程序和API的安全性。常见的组合有用户名/密码+短信验证码、用户名/密码+动态令牌、用户名/密码+人脸识别、人脸识别+短信验证码等。这类技术下的业务场景中,认证通常融入单点登录SSO系统中,作为整个流程的一个环节。开源组件CAS的单点登录实现机制如图所示。
步骤4中对用户身份的认证涉及的技术即为上面提及的各种身份认证技术,比如身份认证服务调用LDAP来进行用户名和密码的验证或调用数据库来进行用户名和密码的验证、身份认证服务调用OTP服务下发一次性令牌等。
在基于应用程序身份的认证技术中,是将应用程序客户端身份认证作为认证的主体,来确认应用程序的身份,常用的认证方式有HTTP Basic基本认证、Token认证、数字证书认证等。这类技术的解决方案中,以OpenID Connect为代表,将身份认证融入授权码、简易授权码、客户端凭据等授权流程中,完成不同场景下的API身份认证。
在OpenID Connect标准规范中,对认证方式的定义既包含基于用户身份的认证技术也包含基于应用程序身份的认证技术,其对应的开源产品Connect2id server中支持面向用户身份的可插拔式的多种集成认证方式,比如LDAP认证、OTP令牌认证、X.509证书认证、生物特征认证等;也支持面向客户端的HTTP Basic基本认证、JWT令牌认证、X.509证书认证以及客户端注册身份的联邦认证。
在API的应用和管理过程中,添加身份认证对于维护整个应用程序的安全、稳定有着重要的意义。安全的基础是信任,身份认证技术是对于API被使用过程中使用者身份的第一层安全保障,通过身份确认有利于建立以身份为中心的对象关系,比如调用的对象、调用的时间、调用的频率、调用的来源等;通过使用者身份反查审计日志,追溯整个API调用链等。使用了身份认证技术的API,更有利于对API的统一管理、运营、维护,提高API日常管理的效率。