当用户登出应用程序时,网关如何与该用户登出的所有服务进行通信?
换句话说,当用户在微服务架构应用程序中注销时会发生什么?
这是一个一般性的问题,我会给出我个人的想法。
让我们以一个单页应用程序为例,它与一堆微服务通信,并由一个验证令牌的网关保护。
当用户登录时,授权服务器给出的令牌存储在浏览器存储中(例如:localstorage)。
当用户注销时,不向网关或认证服务器发送通信,令牌将简单地从浏览器存储中删除。
所以,如果有人获得了访问令牌,只要访问令牌没有过期,他们就可以用来调用服务。
这就是授权服务器给出两个令牌的典型原因,一个访问令牌和一个刷新令牌。用于保护api的访问令牌很快就会过期,而过期时间更长的刷新令牌可以用来获得新的访问令牌。
由于您已经包含了JWT标记,因此我试图仅通过考虑这一点来给出响应。JWT令牌是一个自给自足的编码令牌,它包含某些属性,包括过期时间。唯一的目的是提供无状态身份验证。认证服务通常返回两个令牌,access_token
和refresh_token
。客户端将它们都存储在自己端的某个存储中。访问令牌通常在很短的时间内发出,因此客户端可以使用refresh_token以便在后者到期时获得新的access_token。用户可以访问这些服务,直到refresh_token过期。之后,客户端必须通过身份验证过程来获得新的令牌。当用户从系统客户端注销时,应该从其存储中删除这两个令牌。因为在JWT的情况下没有状态维护,服务器仍然可以接受旧令牌,直到它们没有过期。
令牌的过期和完整性验证应该在网关级别完成。
可以避免在服务到服务通信中使用令牌,因为这些是内部服务并且在私有网络中运行,尽管也可以在此级别执行相同的验证。
因此,在用户登出的情况下,用户的认证令牌应该从客户端删除,网关不应该与其他服务通信。在其他特殊情况下,令牌撤销是一种特殊情况,可以通过在可扩展的身份验证系统中使用分布式缓存存储来处理。
基于令牌的服务通常可以从令牌中推断出以下内容-
- 谁发出请求?
- 到什么时候这个令牌被认为是有效的?
- 使用此令牌时允许哪些操作?
基于令牌的服务根据所提供的令牌接受或拒绝请求,而不管发出请求的是用户还是机器。登录用户只是可以执行该用户被授权执行的操作的人。令牌是这样一个用户的有限表示。
我的观点是,这是应用程序告诉用户他们已经登录(有一个它仍然可以使用的令牌),或者注销(还没有令牌,或者过期)。这样的令牌是通过使用用户名和密码对服务进行身份验证来获得的。
答案是基于我的知识,所以每个人,如果有错误请指出来。我不知道关于aws api网关的细节,所以也许其他人可以简要介绍一下,以防它的工作方式不同。