技能 auth-implementation-patterns
🔐

auth-implementation-patterns

安全

实施安全认证系统

也可从以下获取: wshobson

学习经过实战检验的认证和授权模式,在应用中构建安全的访问控制,无需重复造轮子。

支持: Claude Codex Code(CC)
🥉 75 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“auth-implementation-patterns”。 如何在Express中实现JWT认证?

预期结果:

完整的JWT实现包括:1)使用环境变量中的密钥通过jwt.sign()生成令牌,2)创建验证Bearer令牌的认证中间件,3)使用短寿命访问令牌(15分钟)和较长刷新令牌(7天),4)在数据库中哈希存储刷新令牌。详见implementation-playbook.md模式1的完整代码。

正在使用“auth-implementation-patterns”。 会话认证和基于令牌的认证有什么区别?

预期结果:

基于会话:服务器存储状态,会话ID在Cookie中,简单但需要粘性会话。基于令牌(JWT):无状态,自包含声明,可水平扩展,但无法轻易撤销单个令牌。传统应用选择会话,API和微服务选择JWT。

正在使用“auth-implementation-patterns”。 如何实现基于角色的授权?

预期结果:

在枚举中定义角色(USER、MODERATOR、ADMIN),创建角色层级映射,构建requireRole()中间件检查用户角色是否在允许的角色中,将中间件应用于受保护路由。示例:app.delete('/users/:id', authenticate, requireRole('ADMIN'), handler)

安全审计

安全
v1 • 2/24/2026

Educational documentation skill containing authentication and authorization code patterns. All 67 static findings are false positives: backticks are markdown code fences, environment variable access demonstrates proper secret handling, and weak crypto mentions are in cautionary context. No actual security risks present.

2
已扫描文件
661
分析行数
0
发现项
1
审计总数
未发现安全问题
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
50
社区
100
安全
100
规范符合性

你能构建什么

从头构建JWT认证

实现完整的基于令牌的认证,包括访问令牌、刷新令牌和适当的密钥管理

添加OAuth2社交登录

将Google和GitHub OAuth2认证集成到现有应用中

设计授权模型

为应用资源创建RBAC或基于权限的访问控制系统

试试这些提示

基础JWT设置
展示如何使用Express在Node.js中实现JWT认证,包括令牌生成和验证中间件
刷新令牌流程
创建安全的刷新令牌流程,将刷新令牌存储在数据库中并颁发新的访问令牌
OAuth2集成
使用Passport.js实现Google OAuth2登录,认证后生成JWT令牌
RBAC授权
设计具有管理员、版主和用户角色的基于角色的访问控制系统,包括权限检查中间件

最佳实践

  • 始终使用环境变量存储密钥(JWT_SECRET、SESSION_SECRET),切勿硬编码凭据
  • 使用短寿命访问令牌(15-30分钟)和单独的刷新令牌以提高安全性
  • 在数据库中哈希存储刷新令牌,并在使用时实施令牌轮换

避免

  • 将JWT存储在localStorage中会使令牌暴露于XSS攻击 - 改为使用httpOnlyCookie
  • 不验证令牌过期时间会导致过期令牌被无限期使用
  • 仅在客户端进行授权检查可以被绕过 - 务必在服务端验证

常见问题

什么时候应该使用基于会话的认证 vs 基于令牌的认证?
在使用传统服务端渲染应用、需要简单注销和CSRF保护时使用会话。在使用SPA、移动应用和微服务、需要无状态认证和跨域请求时使用令牌(JWT)。
如何安全地存储JWT密钥?
切勿在源代码中硬编码密钥。使用环境变量(process.env.JWT_SECRET)在运行时从.env文件加载。确保.env在.gitignore中,并在生产环境中从安全来源注入密钥。
认证和授权有什么区别?
认证(AuthN)验证用户是谁(使用凭据登录)。授权(AuthZ)决定用户可以做什么(权限、角色)。两者都是必不可少的,但在访问控制中服务于不同的目的。
如何安全地实现刷新令牌?
生成随机UUID作为刷新令牌,在数据库中存储哈希版本,设置过期时间(7-30天),实施轮换(每次使用时颁发新刷新令牌),并在注销或安全事件时允许撤销。
JWT令牌可以被撤销吗?
JWT本质上是无状态的。撤销方法:在Redis/数据库中使用令牌黑名单,设置短过期时间让令牌自然过期,或使用刷新令牌轮换使旧令牌对失效。
处理密码存储的最佳方式是什么?
始终使用bcrypt或argon2以高工作因子(bcrypt成本10-12)哈希密码。切勿存储明文密码。使用bcrypt自动提供的盐。使用bcrypt.compare()验证。