API 安全
我们的 API 基于 HTTPS
协议,使用 POST
方法传输 JSON
数据。为了确保安全并防止数据被篡改,API 要求客户端进行认证,并支持两种认证方式:Basic Auth 和 RSA 签名认证。为保护敏感数据,需要加密部分字段,我们提供两种加密方式:AES 和 RSA。本文将介绍这两种认证机制,并讨论加密敏感数据的两种方式。
认证
1. RSA 签名认证(推荐)
RSA 签名认证通过使用私钥对请求数据进行签名,接收方可以使用发送方的公钥来验证请求的真实性,确保消息未被篡改并确认发送者身份。
工作原理:
客户端使用自己的 RSA 私钥对请求报文进行签名。服务器通过交换过来的客户端的 RSA 公钥验证签名的有效性。
优点:
- 相比 Basic Auth,安全性更高,采用非对称加密和数字签名。
- 能有效确保发送方的身份和消息的完整性。
- 防止重放攻击和中间人攻击。
缺点:
- 实现复杂度较高,涉及公私钥管理。
2. Basic Auth
Basic Authentication 是一种简单的认证方式,它通过将用户名和密码(或令牌)进行 Base64 编码后在请求头中发送。这种认证方法主要用于简单的身份验证,但本质上并没有加密,因此需要结合 HTTPS 和IP白名单来确保通信安全。
当前版本暂不支持 Basic Auth,将在下一个版本上线,敬请期待!
工作原理:
请求方将用户名和密码以 用户名:密码
形式组合,并使用 Base64 进行编码。编码后的字符串作为 HTTP 请求头中的 Authorization
字段传递。服务器通过解码来验证用户名和密码的有效性。
优点:
- 实现简单。
- 许多 HTTP 客户端和服务器端库天然支持 Basic Auth。
缺点:
- Base64 编码仅是简单的编码,无法提供足够的安全性。
- 用户名和密码在每次请求中都会被传递,增加了暴露风险。
- 需要配合HTTPS和IP白名单使用,否则容易遭受中间人攻击。
我们推荐使用 RSA 签名认证而非 Basic Auth,因为 RSA 提供了更高的安全性,能够防止数据篡改,并确保通信双方身份的安全。
数据加密
为了确保敏感数据在传输过程中不会被泄露或篡改,我们的 API 支持使用 RSA 或 AES 加密对敏感数据进行保护。
1. RSA 加密(推荐)
RSA 是一种非对称加密算法,使用一对密钥:公钥用于加密,私钥用于解密。RSA 加密非常安全,适用于加密少量的敏感数据。
工作原理:
发送方使用接收方的公钥对数据进行加密。只有接收方可以使用自己的私钥解密数据。
优点:
- 安全性极高,适用于需要高安全性的场景。
- 不需要共享私钥,公钥可公开分发。
缺点:
- 实现复杂度较高,涉及公私钥管理。
2. AES 加密
AES 是一种对称加密算法,即使用相同的密钥进行加密和解密。AES 的加密速度非常快,适合加密大量数据。
当前版本暂不支持 AES 加密,将在下一个版本上线,敬请期待!
工作原理:
发送方和接收方共享同一密钥,用于加密和解密。
优点:
- 加解密速度快,效率高。
- 适合加密大数据量,如文件、长文本等。
缺点:
- 双方需要安全地交换密钥,因为加密和解密使用相同的密钥。
- 密钥管理复杂,在分布式系统中尤其具有挑战性。
我们的API只是加密少量的敏感数据,推荐使用 RSA 加密,安全性更高。