【发布时间】:2020-09-11 09:30:46
【问题描述】:
我有两台服务器。一种用于 Hasura GraphQL api,它查询数据库并提供应用程序数据。另一个是用于身份验证的节点服务器。这两个服务器不在同一个域中。
我有一个 react spa 客户端。当用户登录时,节点服务器使用 hasura graphql 端点验证凭据,并向客户端提供 jwt 令牌和刷新令牌。刷新令牌是通过 httpOnly cookie 发送的,因为 react 客户端和节点服务器在同一个域中。
现在,当 jwt 令牌过期时,我想使用作为 cookie 自动发送到节点服务器的刷新令牌静默刷新 jwt 令牌。我将如何实现它?
我能想到的一种方法是,在客户端我解码 jwt,如果它过期,我向节点服务器上的刷新令牌端点发送一个请求,并在向 hasura 发送任何请求之前获取一个新的 jwt 令牌graphql 服务器需要将访问令牌作为授权标头发送。这意味着我必须在每个 graphql 请求之前进行此检查。这是优化的方式还是有任何其他方式可以在给定我的应用程序架构的情况下静默刷新令牌?
【问题讨论】:
-
你能提供代码吗?
-
我在问这种方法是否正确?我对代码没有任何问题。
-
根据本文档hasura.io/docs/1.0/graphql/manual/subscriptions/index.html,websocket 客户端使用浏览器 cookie,因此它们似乎必须处理访问令牌过期,我在我的手动 graphql 服务器中使用 apollo 并发送新令牌作为webscoket 出错,因为当时没有其他方法,但 Hasura 我不知道如何处理,如果不给他们发票,他们必须处理。
标签: node.js reactjs graphql jwt hasura