NextJS-Auth0 刷新令牌设置

use*_*807 6 session-cookies auth0 next.js

I\xe2\x80\x99m@auth0/nextjs-auth0在带有外部 GraphQL API 的 NextJS 应用程序中使用该包。我们试图阻止用户在注销后使用appSession cookie调用API。由于不可能使访问令牌无效,我们决定尝试设置刷新令牌轮换,但到目前为止我们惨败。

\n

我们有以下设置:

\n

在我的应用程序中:\n我的 ID 令牌过期设置为 1800,\n我打开了刷新令牌轮换,重用间隔为 0。\n我打开了刷新令牌过期,绝对生命周期为 360

\n

在系统 API 上:\n我将令牌过期设置为 60 秒(为了测试更快,但计划稍后将其移至 15 m)

\n

我将其设置AUTH0_SCOPE'openid profile offline_access'\n 并AUTH0_AUDIENCE设置为我的生产网站地址。

\n

我们的api/auth/[...auth0].ts文件只有默认的handleAuth@auth0/nextjs-auth0

\n

在我的上api/graphql.ts,我使用一个withApiAuthRequired调用getAccessToken(req, res)将其发送到 API。

\n

从您第一次登录时起,它就可以正常工作,如果您继续在应用程序上导航,则在调用时它将毫无问题地生成新令牌getAccessToken(req, res),但如果您在新选项卡中打开页面或在令牌过期后刷新应用程序,应用程序完全崩溃。在我看来,auth0 通过了身份验证,因为 appSession 仍然有效(24 小时到期),但在getAccessToken(req, res)(1 分钟到期)时失败,查看日志,它说它没有\xe2\x80\x99t 具有刷新令牌。这是一个错误示例:

\n
{\n  "date": "2023-07-26T03:01:15.413Z",\n  "type": "fertft",\n  "description": "Unknown or invalid refresh token.",\n  "connection_id": "",\n  "client_id": "somethingsomethingsomething",\n  "client_name": "Client Namet",\n  "ip": "some IP",\n  "user_agent": "Other 0.0.0 / Other 0.0.0",\n  "hostname": "our host",\n  "user_id": "",\n  "user_name": "",\n  "auth0_client": {\n    "name": "nextjs-auth0",\n    "version": "2.7.0",\n    "env": {\n      "node": "v19.4.0"\n    }\n  },\n  "log_id": "log id",\n  "_id": "id",\n  "isMobile": false,\n  "id": "id"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

关于如何配置我的应用程序以在注销后以某种方式使 appSession 令牌失效,并且在当天晚些时候打开页面时仍然保持其工作,有什么想法吗?

\n

我\xe2\x80\x99m 读到,为此你需要使用getAccessTokenSilently而不是getAccessToken,但它不存在\xe2\x80\x99t 上@auth0/nextjs-auth0,这是否意味着要拥有它,我必须移动到 auth0-react?是否可以在使用 NextJS 的 api 部分的同时使用它?

\n

知道如何使我的应用程序更安全以避免 cookie 被利用吗?

\n