我有一个多微服务架构,我打算在其中应用安全性 .
My View of the Security Design: 使用LDAP进行身份验证,当用户通过身份验证时,将使用"secret key"生成JSON Web令牌(JWT),令牌将具有角色,到期时间等 . 每次调用微服务时,此令牌都将被传递在Header中授权 . 在我看来,我只有一个auth服务器,它对用户进行身份验证并生成JWT .
My Doubt:
现在,当一个微服务将接收一个呼叫(包含Header中的JWT)时,它是否会一直命中auth服务器以验证令牌?
If yes ,它不会导致多次调用auth服务器,从而导致不良做法?
If no ,客户端将如何验证令牌以及auth服务器的范围?
1 回答
JWT始终是签名的,因此您可以在不调用某个中央auth实例的情况下验证给定的令牌 . auth服务器知道签署令牌的秘密,并且所有想要验证令牌的服务也需要有一种方法来检查它 .
签署有两种不同的方法:
symmetric:在散列有效负载之前附加一个秘密值 . 消费服务还需要知道这个秘密,并且可以通过将秘密附加到所接收的有效载荷并使用所发送的散列检查所得到的散列来进行验证 .
非对称:通过使用某些PKI签名/验证,可能只有auth服务器具有用于对令牌进行签名的私钥 . 然后,所有消费服务只需要公共部分进行验证 .
我更喜欢第二种方式,因为它减少了钥匙被盗的可能性 . 如果其中一个消费服务被劫持,则没有秘密丢失,以便攻击者可以创建有效令牌 . 与对称方式中使用的简单哈希相比,使用这样的算法可能需要更多的时间/ cpu周期来进行验证 .
有关不同机制的示例,请参阅官方JWT页面:https://jwt.io/