소스 정보
- 저장소
- microwind/ai-skills
- 최근 소스 활동
- 2026년 3월 23일 08:00
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 68
- 포크
- 17
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/microwind/ai-skills --skill jwt명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | JWT身份验证 |
| description | 当实现JWT身份验证时,设计令牌生成策略,优化身份验证流程,解决令牌安全问题。验证身份验证架构,设计授权机制,和最佳实践。 |
| license | MIT |
JWT(JSON Web Token)是现代Web应用中广泛使用的身份验证机制。不当的JWT实现会导致安全漏洞、令牌泄露和系统性能问题。在设计JWT系统前需要仔细分析安全需求。
核心原则: 好的JWT设计应该安全可靠、性能优良、易于管理、可扩展性强。坏的JWT设计会存在安全漏洞、令牌滥用、性能瓶颈。
始终:
触发短语:
问题: 令牌泄露风险
原因: 令牌在客户端存储不当
解决: 使用HttpOnly Cookie,避免localStorage存储敏感令牌
问题: 令牌被篡改
原因: 签名验证不严格
解决: 使用强签名算法,定期轮换密钥
问题: 令牌重放攻击
原因: 令牌唯一性不足
解决: 添加jti(JWT ID)声明,实现令牌黑名单
问题: 验证性能瓶颈
原因: 每次请求都验证令牌
解决: 实现令牌缓存,优化验证逻辑
问题: 令牌过大
原因: 载荷包含过多信息
解决: 精简载荷,使用引用ID
import jwt
import datetime
from typing import Dict, Optional
class JWTManager:
def __init__(self, secret_key: str, algorithm: str = 'HS256'):
self.secret_key = secret_key
self.algorithm = algorithm
def generate_token(self, payload: Dict, expires_in: int = 3600) -> str:
"""生成JWT令牌"""
now = datetime.datetime.utcnow()
payload.update({
'iat': now,
'exp': now + datetime.timedelta(seconds=expires_in),
'jti': str(uuid.uuid4()) # 唯一标识符
})
return jwt.encode(payload, self.secret_key, algorithm=self.algorithm)
def verify_token(self, token: str) -> Optional[Dict]:
"""验证JWT令牌"""
try:
payload = jwt.decode(
token,
self.secret_key,
algorithms=[self.algorithm]
)
return payload
except jwt.ExpiredSignatureError:
raise Exception()
jwt.InvalidTokenError:
Exception()
jwt_manager = JWTManager(secret_key=)
user_data = {: , : , : }
token = jwt_manager.generate_token(user_data, expires_in=)
:
payload = jwt_manager.verify_token(token)
()
Exception e:
()
class RefreshTokenManager:
def __init__(self, secret_key: str):
self.secret_key = secret_key
self.refresh_tokens = {} # 实际应用中应使用数据库
def generate_refresh_token(self, user_id: int) -> str:
"""生成刷新令牌"""
payload = {
'user_id': user_id,
'type': 'refresh',
'iat': datetime.datetime.utcnow(),
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=7)
}
token = jwt.encode(payload, self.secret_key, algorithm='HS256')
self.refresh_tokens[user_id] = token
return token
def refresh_access_token(self, refresh_token: str) -> str:
"""使用刷新令牌获取新的访问令牌"""
try:
payload = jwt.decode(refresh_token, self.secret_key, algorithms=['HS256'])
if payload.get('type') != 'refresh':
raise Exception("无效的刷新令牌")
user_id = payload['user_id']
if self.refresh_tokens.get(user_id) != refresh_token:
raise Exception()
new_payload = {: user_id, : }
jwt_manager.generate_token(new_payload, expires_in=)
jwt.ExpiredSignatureError:
Exception()
jwt.InvalidTokenError:
Exception()
refresh_manager = RefreshTokenManager(secret_key=)
refresh_token = refresh_manager.generate_refresh_token(user_id=)
:
new_access_token = refresh_manager.refresh_access_token(refresh_token)
()
Exception e:
()
const jwt = require('jsonwebtoken');
class JWTAuthMiddleware {
constructor(secretKey) {
this.secretKey = secretKey;
}
// 生成令牌
generateToken(payload, expiresIn = '1h') {
return jwt.sign(payload, this.secretKey, { expiresIn });
}
// 验证中间件
authenticate() {
return (req, res, next) => {
const token = this.extractToken(req);
if (!token) {
return res.status(401).json({ error: '未提供令牌' });
}
try {
const decoded = jwt.verify(token, this.secretKey);
req.user = decoded;
next();
} catch (error) {
if (error.name === 'TokenExpiredError') {
return res.status(401).({ : });
} (error. === ) {
res.().({ : });
} {
res.().({ : });
}
}
};
}
() {
{
(!req.) {
res.().({ : });
}
(!roles.(req..)) {
res.().({ : });
}
();
};
}
() {
authHeader = req..;
(authHeader && authHeader.()) {
authHeader.();
}
;
}
}
auth = (process..);
app.(, auth.(), {
res.({ : req. });
});
app.(,
auth.(),
auth.([]),
{
res.({ : });
}
);