Auth.js
Auth.js 是面向现代 Web 框架的开源认证库;在 Next.js 中集中配置 Provider、Session 与认证处理器,并暴露 auth()/handlers 等服务端集成入口。
#resource
#growing
#security
#backend
#react
[!info] related notes
- 相关主题:
- 相关 MOC:
- 相关 howto:
Auth.js
这是什么
Auth.js 是一个认证库,不是“授权系统”本身。它主要帮应用处理:
- OAuth / OIDC 等登录 Provider
- Credentials 等自定义认证入口
- Session 生命周期
- Cookie / token 处理
- 认证 Route Handler 集成
- 服务端读取当前登录身份
- 登录 / 登出等认证流程
在 Next.js 中,常见核心配置类似:
import NextAuth from 'next-auth'
export const { auth, handlers, signIn, signOut } = NextAuth({
providers: [/* ... */],
})
然后认证 HTTP 入口通常由 App Router Route Handler 暴露。
Auth.js 解决什么,不解决什么
Auth.js
→ Authentication plumbing
→ Session plumbing
→ Provider integration
Application Service / Policy
→ Resource Authorization
→ Ownership
→ Domain permission
因此:
const session = await auth()
只说明“当前请求关联到了某个已认证身份”,并不能证明:
这个用户可以修改 goal:123
对象级权限仍然需要业务查询与 policy 判断。
Provider 是什么
Provider 描述用户如何证明身份,例如:
GitHub / Google / OIDC
→ 第三方身份提供商
Credentials
→ 应用自己收 username/email/password
→ 自己负责验证 credentials
使用 Credentials Provider 时,Auth.js 不会神奇地替你设计密码策略、用户表、密码 hash、锁定策略或注册流程;这些仍属于应用业务与安全设计。
Session 是什么
Auth.js 可以让后续请求重新得到当前身份上下文。
在学习时要继续区分:
Session
→ 跨请求保存认证状态
Cookie
→ 浏览器传输/保存凭证的一种载体
JWT
→ Token 的一种结构格式
Authorization
→ 是否允许访问具体资源
不要把它们当成同一个概念。
auth() 的角色
在 Server Component、Server Action、Route Handler 等服务器环境中,可以读取当前认证上下文:
Incoming request
→ session credential
→ Auth.js
→ auth()
→ current identity/session
这个结果适合作为后续授权判断的身份输入。
Client Session 的角色
交互型 Client Component 可能需要客户端 session state,例如控制导航栏头像、登录按钮等。
这类客户端 session 主要服务 UI convenience,不应成为敏感业务操作的最终 trust boundary:
Client says logged in
≠ server authorization proof
Auth.js 与自建认证
可以自建完整认证链,但会涉及:
- 密码 hash
- OAuth/OIDC details
- CSRF/cookie/security
- Session lifecycle
- rotation / expiry
- callbacks / provider edge cases
认证库的价值主要是降低这些协议与生命周期样板成本,而不是消除应用自己的 authorization 和 user-domain 设计。
最短记忆
Auth.js = auth/session framework integration
Auth.js ≠ domain authorization engine
Session exists ≠ owns resource
Credentials Provider ≠ registration system
Client session ≠ trusted authorization result