Dav*_*vid 6 authentication jwt microservices
我创建了一个基于 PHP Slim 框架的 Rest API,它使用 JSON Web Tokens (JWT) 来验证和授权访问。
要使用 API,客户端必须首先通过将其凭据发送到特殊/auth/token路由来验证自己,如果正确,则返回包含允许权限列表的数字签名令牌。对 API 的所有后续请求都需要令牌以进行身份验证和授权。这是非常标准的东西,效果很好。
但现在我想将/auth/token服务分离成自己的微服务,以便将来可以与其他 API 一起使用。
问题是,API 现在将如何验证 JWT,因为它们无权访问用于生成它的秘密?
我使用Firebase\JWT\JWT生成令牌,该令牌将移动到新的身份验证服务。我使用tuupola/slim-jwt-auth中间件来验证每个 API 上收到的令牌。
由于每个 API 和新的身份验证服务都将在同一台主机上运行,我可能可以在它们之间共享秘密,但这感觉是一种不好的做法。有没有更好的办法?
最好使用私钥/公钥(RSA 或 ECDSA 算法)而不是秘密(HMAC 算法)来签署 JWT。在这种情况下,您的身份验证服务将使用私钥对 JWT 进行签名,而其他 API 将使用公钥验证 JWT,那么您仍然需要将公钥分发给您的 API,但您有选择。
根据您的架构,您可能会查看:
API网关模式
对于微服务架构,一个好的实践是使用 API 网关模式。有关网关模式的更多信息。API Gateway 可以验证 JWT 令牌,然后将请求代理到您的服务。因此,身份验证服务将使用私钥对 JWT 令牌进行签名,然后对 API 的请求将通过 API 网关。API网关将使用公钥验证令牌,因此您不会将公钥分发给代理后面的所有API。
使用这种方法,您将需要一个 API 网关,您可以查看:express-gateway、kong + jwt 插件、tyk等,API 网关还有更多好处,而不仅仅是 JWT 令牌验证,例如流量控制、分析、日志记录、请求和响应转换等等。
保密管理
除了 API Gateway 之外,您还可以查看集中式机密管理系统,例如Hashi Vault。根据项目/团队规模,这可能对您的项目来说是一种矫枉过正。
| 归档时间: |
|
| 查看次数: |
2895 次 |
| 最近记录: |