gpt4 book ai didi

authentication - 如何跨不同 API 对 JSON Web token (JWT) 进行身份验证?

转载 作者:行者123 更新时间:2023-12-04 06:47:46 24 4
gpt4 key购买 nike

我创建了一个基于 PHP Slim 框架的 Rest API,它使用 JSON Web Tokens (JWT) 来验证和授权访问。

要使用 API,客户端必须首先通过将其凭据发送到特殊的 /auth/token 来验证自己的身份。如果正确,则返回包含允许权限列表的数字签名 token 。对 API 的所有后续请求都需要 token 以进行身份​​验证和授权。这是非常标准的东西,效果很好。

但现在我想把 /auth/token 分开service 到它自己的微服务中,以便我将来可以将它与其他 API 一起使用。

问题是,API 现在将如何验证 JWT,因为它们无权访问用于生成它的 secret ?

我使用 Firebase\JWT\JWT生成 token ,该 token 将移动到新的身份验证服务。我使用 tuupola/slim-jwt-auth中间件对每个 API 上收到的 token 进行身份验证。

由于每个 API 和新的身份验证服务都将在同一台主机上运行,​​我可能可以在它们之间共享 secret ,但这感觉是一种不好的做法。有没有更好的办法?

最佳答案

最好使用私钥/公钥(RSA 或 ECDSA 算法)而不是 secret (HMAC 算法)对 JWT 进行签名。在这种情况下,您的身份验证服务将使用私钥对 JWT 进行签名,而其他 API 将使用公钥验证 JWT,那么……您仍然需要将公钥分发给您的 API,但您可以选择。

根据您的架构,您可能会查看:

API 网关模式

对于微服务架构,一个好的做法是使用 API 网关模式。 More about gateway pattern . API Gateway 可以验证 JWT token ,然后将请求代理到您的服务。因此,身份验证服务将使用私钥对 JWT token 进行签名,然后对 API 的请求将通过 API 网关。 API Gateway 将使用公钥验证 token ,因此您不会将公钥分发给代理后面的所有 API。

使用这种方法,您将需要一个 API 网关,您可以查看:express-gateway , kong + jwt plugin , tyk等等,API 网关还有更多好处,而不仅仅是 JWT token 验证,例如流量控制、分析、日志记录、请求和响应转换等。

secret 管理

除了 API Gateway 之外,您还可以查看集中式 secret 管理系统,例如 Hashi Vault .取决于项目/团队规模,这对您的项目来说可能是一种矫枉过正。

关于authentication - 如何跨不同 API 对 JSON Web token (JWT) 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55394912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com