我正在研究在两个应用程序服务之间设置身份验证。服务 A 将调用服务 B,我希望服务 B 只接受来自服务 A 的 (http) 调用,其他任何地方都没有。
我知道 JWT 身份验证是如何工作的并且可以实现它。如果我理解正确(我想我理解,但如果我错了请纠正我),它的工作原理是这样的:
- 服务 A 从服务 B(或身份服务器,但我们假设点对点)请求 JWT
- 服务 B 使用 JWT 进行响应,并使用服务 B 的密钥签名
- 服务 A 调用服务 B 并包含 JWT
- 服务 B 检查 JWT,并且可以知道是否确实是服务 A 发出了调用,而不会篡改 JWT
但是第一个电话真的有必要吗?我不能这样做:
- 服务 A 使用服务 A 的私钥对每个请求进行签名
- 服务 B 使用服务 A 的公钥解密请求
- 服务 B 现在知道请求是否真的来自服务 A
我将在 https 上工作,不需要索赔。我只需要知道请求是否来自服务 A。因为只允许服务 A 调用服务 B,但是当它调用服务 B 时,它可以访问所有 API 端点(因此无需声明)。
使用非对称加密代替 JWT 似乎更简单,但我想知道这样做是否安全、正确和标准。