正确的微服务JWT流程

时间:2017-07-13 05:26:18

标签: security jwt microservices

我目前正在构建一个微服务架构,并从auth服务器和客户端开始。我还想确认使用令牌验证用户的最佳流程。

flow

在上图中。第3步是我开始感到困惑。 我想到了问题的两个解决方案。

每个api都会将令牌传递给auth服务器并等待获得内部存储的令牌与db匹配的批准,并且它仍然有效。

两个是在JWT令牌中包含一个秘密短语,只需让API服务解析并在令牌有效时自行检查。(秘密短语是如果黑客试图伪造令牌并解析它以某种方式,如果没有用于加密令牌的密码,这个短语就会关闭。我甚至不知道是否可能。如果没有,那么我猜2会是最好的行动方案)

2 个答案:

答案 0 :(得分:1)

如果黑客不知道签名密钥,则无法创建有效的JWT token。如果他以某种方式设法获得该签名密钥,则可以合理地假设他也能够获得您的“秘密短语”。

关于检查:JWT tokens可以检查API service,因为它们包含所需的所有信息(API服务必须知道的签名密钥除外)。此处也可以检查到期日期。无论如何,您还需要存储在令牌内的信息,例如用户ID。如果你想要更好的可扩展性,你应该这样做。

您需要检查JWT token与第三个Auth service的唯一原因是查看它是否已失效;为此,您需要一个集中服务,尽管您可以将无效令牌列表复制到所有API services以获得更好的弹性。

答案 1 :(得分:1)

  1. 您实际上不必将请求转发给Auth-server来验证JWT令牌。 JWT令牌就像票据,一旦签名,任何共享密钥的人都可以对其进行验证。

    我建议您在所有API服务前面提供优质服务。边缘服务或者共享由Auth服务签署JWT令牌的密钥,或者具有用于验证签名的公钥。

    验证签名后,边缘服务可以从令牌中提取所需信息并将其添加到请求标头。您的下游服务可以根据需要使用此信息。

  2. 您可以使用Https强制您的请求不会被网络上的任何人截获。万一,即使有人试图搞砸JWT令牌,签名也不会匹配,你可以检测到。请通过JWT/KONG: Cannot create JWTs with a shared secret了解有关使用公钥 - 私钥创建解析JWT令牌的更多信息。