微服务化以后,应用的认证鉴权面临多方面的挑战。本文结合 Apache ServiceComb-fence 项目的实践,分享认证鉴权设计需要考虑的一些问题,以及 Apache ServiceComb-fence 总体认证鉴权支持的一个蓝图。
1 认证鉴权的场景
传统的一些应用,认证鉴权相对比较简单。用户通过输入用户名密码登录系统,系统根据用户角色信息判断用户是否具备操作权限。这是一种相对孤立的封闭系统。现在的互联网应用,不仅需要访问本应用的资源,还需要访问第三方的资源,同时还提供接口给第三方使用。应用的接入形式是多样化的,有手机,WEB客户端,API访问等。认证的方式包括用户名密码、手机验证码、人脸识别等。微服务化架构,需要考虑分布式的认证鉴权机制,保证分布式认证的安全性和高效性。
1.1 系统内部的认证鉴权
很多应用都有自己的用户和权限管理系统,用户注册后,就拥有了访问应用的权限。系统内部的认证机制已经比较成熟,但是需要考虑的场景仍然非常多样。
从登陆方式看,有如下一些场景:
-
使用用户名密码登录。用户名可以是手机号、邮箱、工号等,同时需要增加验证码功能,以防止暴力破解。
-
使用多重因子认证。除了用户名密码,很多系统还需要提供双重因子认证,比如手机验证码、实名认证(人脸识别),数字证书(U盾),动态口令(E-Token,Authentication APP、等)。
-
人机接口和机机接口需要设计不一样的认证方案。前面的认证方式一般适用于人机接口,机机接口一般会基于Token或者共享秘钥、密钥对等方式完成认证。区分了人机接口和机机接口,还需要对不同的接口做好访问控制和网络隔离。
在微服务架构下,还需要考虑认证的性能。传统的会话管理模式需要共享会话状态实现认证,这个对于认证服务的性能是非常大的考验,容易成为整个系统的瓶颈。