微服务架构(基于令牌)中的所有服务如何知道用户已注销?

How does all services in microservice architecture (token based) know that the user has logged out?

当用户注销(sign out)应用程序时,网关如何与用户已注销的所有服务通信?

换句话说,当用户在微服务架构应用程序中注销时会发生什么?

这是一个笼统的问题,我会给出我的个人想法。

让我们来看一个单页应用程序,与一堆微服务对话并由验证令牌的网关保护。

当用户登录时,身份验证服务器提供的令牌存储在浏览器存储中(例如:localstorage)。

当用户注销时,不会向网关或身份验证服务器发送任何通信,令牌只会从浏览器存储中删除。

因此,如果有人获得了访问令牌,只要访问令牌没有过期,就可以使用它们来调用服务。

这通常是身份验证服务器提供两个令牌的原因,一个是访问令牌,一个是刷新令牌。用于保护 api 的访问令牌很快就会过期,并且可以使用具有更长到期时间的刷新令牌来获取新的访问令牌。

基于令牌的服务通常可以从令牌中推断出以下内容 -

  • 谁提出了请求?
  • 此令牌在什么时间之前被视为有效?
  • 使用此令牌时允许执行哪些操作?

基于令牌的服务仅根据提供的令牌接受或拒绝请求,而不管发出请求的是用户还是机器。登录用户只是可以执行该用户被授权执行的操作的人。令牌是此类用户的有限表示。

我的意思是,它是应用程序告诉用户他们已登录(拥有它仍然可以使用的令牌)或已注销(还没有令牌,或已过期)。这样的令牌是通过使用用户名和密码对服务进行身份验证获得的。

根据我的知识回答,如有错误请大家指出。我不太了解 aws api 网关的细节,所以如果它的工作方式不同,也许其他人可以向您简要介绍一下。

因为你已经包含了 JWT 标签,所以我试图仅考虑这一点来给出回应。 JWT 令牌是一种自给自足的编码令牌,其中包含某些属性,包括有效期。唯一目的是提供无状态身份验证。身份验证服务通常使用 returns 两个令牌,access_tokenrefresh_token。客户端将它们都存储在他们端的某个存储中。访问令牌通常在很短的时间内发布,因此客户端可以使用 refresh_token 以便在后者到期时获得新的 access_token。在 refresh_token 过期之前,您可以访问这些服务。之后,客户端必须通过身份验证过程才能获得新令牌。如果用户从系统客户端注销,则应从其存储中删除这两个令牌。因为在 JWT 的情况下没有状态维护,服务器仍然可以接受旧令牌,直到它们没有过期。

令牌的过期和完整性验证应在网关级别完成。

可以避免将令牌用于服务到服务的通信,因为这些是内部服务并且 运行 在专用网络中,尽管也可以在此级别进行相同的验证。

因此,如果用户注销,则应从客户端删除用户的身份验证令牌,并且网关不应与其他服务通信。还有其他特殊情况,其中令牌撤销是一种特殊情况,可以通过在可扩展身份验证系统中借助分布式缓存存储来处理。