常见 CS 架构的用户认证方式
Posted on Thu, 05 Mar 2026 15:29:45 +0800 by LiangMingJian
基本认证
这是最简单的认证方式,即通过用户名和密码访问服务器便可以完成认证。
客户端发送用户名和密码给服务器,服务器返回认证信息给客户端。

多因素身份认证(MFA)
多因素身份认证(Multi-Factor Authentication, MFA)是一种比基本认证更加安全的认证方式。
与基本认证不同,在多因素认证中,客户端需要通过额外的令牌生成器获取通行令牌,然后再将用户名和通行令牌送往服务器进行认证。
在这个过程中,客户端可以通过快捷密码 PIN、指纹、USB 令牌等便捷方式从令牌生成器中获取令牌,而不必输入复杂的用户密码,提供密码的安全性。

客户机认证
这种认证方式需要使用到 SSH/TLS 协议来标识客户端,是一种通过数字证书认证,无需账号密码的认证方式。
客户机认证使用到 SSH/TLS 证书的非对称加密特性。客户端和服务器双方交换各自的公钥,在进行认证时,通过网络自动发送证书给服务器,服务器根据公钥进行解密,自动识别用户,完成认证。
在这个过程中,客户端只需要在开始配置一次证书,并传递一次公钥给服务器,那么在后续与服务器的交流中,便不再需要任何操作去进行认证,所有的认证通过 SSH/TLS 全自动完成。
SSH 协议是一种应用层协议,主要用于远程登录和安全的网络服务。SSH 使用非对称加密(如 RSA)进行密钥交换和身份验证,同时使用对称加密(如 AES)来加密传输的数据。
TLS 是传输层的安全协议,是 SSL(Secure Sockets Layer)的继任者。它主要用于保护客户端和服务器之间的通信,确保数据在传输过程中的机密性、完整性和身份验证。

第三方认证
第三方认证其实类似于多因素认证,但不同的是,在第三方认证中,客户端不会直接从服务器获取认证,而是从一个第三方令牌服务器获取认证。同时,服务器也不会从客户端中获取令牌,而是从第三方的令牌服务器中获取令牌。
第三方认证可以用做单点登录的解决方法,让客户端通过一次认证,完成多个服务器平台的登录使用。
单点登录(Single Sign-On,SSO)是一种身份认证机制,允许用户在多个相互信任的应用系统中只需登录一次,即可访问所有授权系统,无需重复输入账号密码。

附录:常见的第三方认证技术
JSON Web 令牌 (JWT)
JSON Web 令牌(JSON Web Token,JWT)是一种开放标准(RFC 7519),用于在客户端和服务器间安全地传输声明信息。
JWT 广泛应用于身份验证和授权场景,它将用户身份、权限等数据编码为一个字符串,便于在网络应用间传递,并通过数字签名确保其完整性和真实性。
JWT 由三个 Base64Url 编码部分组成,使用英文句号 . 分隔,格式为:Header.Payload.Signature。
其中,Header(头部)包含令牌类型和所用签名算法,Payload(参数)部分包含服务器自定义要传输的数据,Signature(签名)是使用 Header 头部指定算法,并结合 Payload 参数加密,生成的用于保证安全完整的数字签名。
JWT 的结构一般类似于下图:

典型的 JWT 认证流程如下所示:
- 用户使用凭证(账号密码)登录。
- 服务器认证用户,将创建的 JWT 返回给用户。
- 当用户想要访问服务器受保护的资源时,客户端应当随请求一起发送 JWT。
- 最后,应用程序服务器使用 JWT 来标识用户并允许其访问资源。
OAuth 2.0
OAuth 2.0 是目前互联网应用中最主流的授权协议标准,其核心目标是让用户安全地授权第三方应用访问其在另一服务上的资源,而无需共享账号密码。比如,微信需要访问用户存放在某某云盘上面的资源。
OAuth 2.0 规范定义了以下四种角色:
- 客户端:希望获取用户存储在其他服务器上资源的第三方应用程序。
- 资源所有者:通常指用户自身,可以授权第三方应用访问受保护的资源。
- 授权服务器:对资源所有者进行身份验证并发放访问令牌的服务器。
- 资源服务器:资源所有者托管受保护资源的服务器。
典型的 OAuth 2.0 认证流程如下所示:
- 资源所有者向客户端应用程序发送请求。
- 客户端应用程序将请求重定向到授权服务器进行授权。
- 授权服务器向资源所有者发送验证和授权请求。
- 资源所有者验证并授权客户端应用程序访问资源。
- 授权服务器向客户端应用程序发送授权代码。
- 客户端应用程序向授权服务器发送请求,用授权码交换访问令牌。
- 授权服务器将访问令牌发送给客户端应用程序。
- 客户端应用程序使用访问令牌向资源服务器发出请求,该令牌用于验证授予客户端应用程序访问资源的授权。
- 响应由资源服务器发送给客户端应用程序。
- 响应由客户端应用程序发送给资源所有者。
————————————