认证授权
本框架采用了基于 JWT 的认证鉴权方式,满足高并发的认证鉴权场景。JWT 有如下特点:
- 安全性:使用 HMAC 或 RSA 算法加密。
- 小型:基于 JSON 格式数据(相较于 XML 等格式的数据体积小,且易于解释)。
- 自解释:可以包含所有必要信息,描述自我的有效性,从而在完成签名后无需再次查询数据库。
关于认证鉴权的基础知识和实现原理可参照 CodingEX 中的相关章节
登录/登出
- 支持账号密码登录(邮箱/手机号 + 密码)
- 支持无密码登录(手机号 + 短信验证码)
- (未实现)支持第三方社交系统登录(微信)
- 防止机器人登录:限制登录失败次数:登录失败超过 3 次提示输入
图形验证码
。 - 限制短信验证码发送频率 1次/1分钟/1设备
- 防止短信炸弹、邮件炸弹:发送需输入图形验证码。
- (未实现)提供异地登录提醒
- 支持用户自主登出
- 支持服务端踢出非法操作用户,即废除其令牌
- 支持高并发用户身份验证
关于高并发用户身份验证可参照 CodingEX 中的相关章节
重置密码
重置记密码流程尚未有工业标准,框架提供一个通用模型,防止绕过主人身份验证。
- 第一步:搜集用户识别身份数据:填写手机号、邮箱地址;
- 第二步:校验安全问题(本框架中省略);
- 第三步:发送令牌(为了防止恶意尝试,需要有图形验证码);
- 第四步:修改密码(令牌 + 新密码);
- 第五步:记录日志。
- 支持修改密码提醒
- 防止密码被暴力破解:采用 bcrypt 慢哈希函数。
关于防止密码被暴力破解基础知识和实现原理可参照 CodingEX 中的相关章节
修改密码
修改密码是用户在登录状态下的操作,后台逻辑要确保对授权 Token 有效性的检验。
- 新密码不能和原密码一致。
- 密码强度策略:至少1个大写字母、1个小写字母、1个数字、8个字符;
- 提供密码强度提示(高、中、低)。
- 支持修改密码提醒
账号绑定与解绑
邮箱和手机号均可以在个人中心完成解绑和再绑定。
- 绑定新账号需要账号有效性验证(同注册)。
- 解绑需要令牌验证;令牌发送需要图形验证码。
- 邮箱和手机号至少存在一个,不能同时解绑。
微信绑定流程
微信可以在个人中心完成绑定和换绑。
- 绑定账号之前需要向微信平台校验账号有效性。
- 绑定账号需要校验是否被其他账号所绑定。
微信登录流程
- 当在个人中心绑定微信之后,可用微信扫码直接登录
微信小程序登录
API列表
GET /credentials/:credential/available
: 检查认证凭证是否可用于注册POST /users/:userId/emails
: 创建电子邮箱地址登录凭证DELETE /users/:userId/emails
: 删除电子邮箱地址登录凭证POST /users/:userId/mobiles
: 创建手机号码登录凭证DELETE /users/:userId/mobiles
: 删除手机号码登录凭证POST /api/v1/users/{userId}/wechatIds
: 添加微信登录凭证PUT /users/:userId/username
: 设置登录用户名PUT /users/:userId/password
: 通过旧密码设置新密码POST /users/:credential/reset-password
: 重置登录密码POST /authorizations
: 验证登录凭证,生成访问令牌DELETE /authorizations/:accessToken
: 销毁访问令牌POST /api/v1/wechat-authorizations
: 微信认证授权POST /api/v1/miniProgram-authorization
: 微信小程序认证授权