简介
NuxtAuth 是一个开源的 Nuxt 模块,为 Nuxt 3 应用程序提供身份验证。它支持多种身份验证方法,允许您自定义用户登录应用程序的方式。
通过直接集成到 Nuxt 中,您可以直接在页面、组件和组合式函数中访问和利用用户会话。
功能
身份验证提供商
- OAuth (例如:Github, Google, Twitter, Azure...)
- 自定义 OAuth (添加您自己的!)
- 凭据 (用户名 / 邮箱 + 密码)
- 邮箱魔法链接
应用侧会话管理
- 会话获取,包含
status
、data
和lastRefreshedAt
getSession
、getCsrfToken
、getProviders
、signIn
和signOut
的方法- 所有方法和属性的完整 TypeScript 支持
应用保护
- 为整个应用程序或特定页面提供应用侧中间件保护
- 服务端中间件和端点保护
常见问题
为什么 NuxtAuth 需要 NextAuth?
authjs 提供程序通过在底层封装 Auth.js / NextAuth.js 来提供其所有功能。这为 Nuxt 3 生态系统带来了超过 22,000 个 Github 星标库的可靠性和便利性,并具有原生的 nuxt 开发者体验 (DX)。封装 Auth.js / NextAuth.js 的第二个优点是,开箱即用地支持许多 OAuth 提供商、数据库适配器、回调等。这也意味着您可以使用所有 NextAuth.js 和 Auth.js 指南和文档,通过 nuxt-auth 的 authjs 提供程序来实现目标。
NuxtAuth 还提供 Nuxt 3 特定的功能,例如方便的应用侧组合式函数,用于登录、注销、访问用户身份验证数据,或者身份验证中间件和插件,它们通过在初始加载时获取身份验证数据、在重新聚焦选项卡时刷新用户身份验证等方式来管理用户身份验证生命周期。
Auth.js 和 NextAuth 之间有什么区别?
我们在任何地方都使用 authjs 来互换地表示 authjs 和 next-auth,因为 next-auth 目前正在过渡成为 authjs (品牌名称: Auth.js)。
我们正在关注此过渡,并在代码变得足够稳定以供使用时更改与之相关的代码。您可以在 this issue 中关注我们对此过渡的实施情况。如果您正在谷歌搜索与此提供商相关的任何内容,我们建议您仍然使用术语 next-auth
,因为这仍然是主要使用的库,也是我们在底层主要使用的稳定库。目前尚不保证仅限 Auth.js 的新功能能够正常工作,因为我们仍然主要依赖 next-auth 作为稳定的基础。
NextAuth GHSA-v64w-49xw-qq89
漏洞
NuxtAuth 封装了 NextAuth v4.21.1
,以提供无数预配置和经过测试的 OAuth 提供程序的可靠性和便利性。在 v4.22
及更高版本中,NextAuth 更改了他们的包导出,阻止 NuxtAuth 用户使用较新版本。
低于 4.22
的 NextAuth 版本受到 GHSA-v64w-49xw-qq89 漏洞的影响,在对此漏洞进行内部调查后,我们确定使用此版本的 NuxtAuth 应用程序不受影响。
更多细节
漏洞描述
GHSA-v64w-49xw-qq89 漏洞仅影响依赖 NextAuth 提供的默认 Middleware authorization 的应用程序。
该漏洞允许攻击者通过从中断的 OAuth 登录流程中访问 JWT 来创建/模拟用户。然后,他们可以手动覆盖会话 Cookie 并模拟登录。但是,这样做不会授予对用户数据或权限的访问权限,但可能允许攻击者查看受保护页面的布局。
为什么它不影响 NuxtAuth?
由于受影响的中间件是为 Next.js 编写的,因此我们为 NuxtAuth 编写了自己的 custom middleware,该中间件不受该漏洞的影响。