使用刷新令牌作为提供给客户端的唯一外部访问令牌

Using Refresh Tokens as the Only External Access Token Given to the Client

我现在正在实施基于微服务的架构。我在我的 UsersService(用于身份验证和授权的微服务)中使用 FastAPI JWT Auth 来生成令牌,并在所有其他微服务中使用基本的 JWT 验证工具,以确保 JWT是合法的(包括直接访问其中每一个上的 Revoked Tokens Redis)。

目前,我正在使用建议的架构,带有访问和刷新令牌。

我正在考虑不将 JWT 访问令牌直接暴露给客户端,而是实现一个 API 网关,将刷新令牌转换为 JWT 在每个请求上。然后 JWT 将被传递到内部微服务以确保入站安全。

为此,客户端只需要访问刷新令牌,因为常规 JWT(生命周期极短)仅用于在内部对用户进行身份验证和授权.我计划在这些 JWT 中包含所有权限和范围信息,而刷新令牌将只有 user 有效负载。

我有两个问题:

  1. 这个架构行得通吗?它安全吗?
  2. 是否有推荐的 python 框架来实现这样的 API 网关?

非常感谢!

这不安全,因为向浏览器发出刷新令牌意味着接收刷新令牌的客户端可以在不通过您的网关的情况下请求他们自己的访问令牌。

更好的方法是只对客户端使用会话 cookie(我假设您的项目中有浏览器)。

一定要看看这个视频 https://www.youtube.com/watch?v=lEnbi4KClVw

刷新令牌仅供请求它的客户端应用程序使用,将其提供给其他人通常是一种不好的做法clients/applications。

如果您只想进行纯粹的服务到服务通信,您应该考虑使用 客户端凭证流程 ,此流程不使用任何刷新令牌,也不涉及任何人类用户。也许这就是你所追求的?然后每个客户端都可以获得自己的访问令牌。