我有一个私有 API,我希望第 3 方客户端授权而不向客户端发送敏感信息,例如密码。在这种情况下,通常的流程是:
- 我们给客户一个秘密的一次性令牌
- 激活此令牌后(例如,使用此令牌调用 api),他可以通过提供密码来创建帐户。
- 客户端使用此密码进行授权并收到一个秘密令牌
- 这个秘密令牌用于每个 api 调用。
这个流程的问题是当我们向他发送一次令牌时。如果有人先使用它,他就会收到他想要的所有数据。
atm非对称加密无处不在,https(ssl)就是基于它。我想知道是否存在不对称身份验证之类的东西。正如我所看到的,这个流程是:
- 客户端和服务器生成 2 个魔法令牌
client_private_token
,client_secret_token
,server_public_token
,server_secret_token
。 - 我们将对手的公共令牌保存在例如双方的设置文件中。
- 服务器响应
server_public_token
- 客户端用于
client_private_token
生成一些session_token
并与需要授权的每个请求一起发送 - 服务器使用它的
server_private_token
anduser_public_token
来验证它session_token
是否有效。
该流程与 ssl 非常相似,但我们不是加密数据,而是生成证明是我们的魔术字符串。
请不要将它与 JWT 混淆,因为 JWT 只是一个带有一些信息和服务器签名的有效负载。要创建 JWT 用户需要首先获得授权。
此外,如果有这样的事情,最好有现代语言的客户,如java
,等js
python