Skip to main content

认证授权

本框架采用了基于 JWT 的认证鉴权方式,满足高并发的认证鉴权场景。JWT 有如下特点:

  • 安全性:使用 HMAC 或 RSA 算法加密。
  • 小型:基于 JSON 格式数据(相较于 XML 等格式的数据体积小,且易于解释)。
  • 自解释:可以包含所有必要信息,描述自我的有效性,从而在完成签名后无需再次查询数据库。

    关于认证鉴权的基础知识和实现原理可参照 CodingEX 中的相关章节

登录/登出

  • 支持账号密码登录(邮箱/手机号 + 密码)
  • 支持无密码登录(手机号 + 短信验证码)
  • (未实现)支持第三方社交系统登录(微信)
  • 防止机器人登录:限制登录失败次数:登录失败超过 3 次提示输入图形验证码
  • 限制短信验证码发送频率 1次/1分钟/1设备
  • 防止短信炸弹、邮件炸弹:发送需输入图形验证码。
  • (未实现)提供异地登录提醒
  • 支持用户自主登出
  • 支持服务端踢出非法操作用户,即废除其令牌
  • 支持高并发用户身份验证

    关于高并发用户身份验证可参照 CodingEX 中的相关章节

重置密码

重置记密码流程尚未有工业标准,框架提供一个通用模型,防止绕过主人身份验证。

  • 第一步:搜集用户识别身份数据:填写手机号、邮箱地址;
  • 第二步:校验安全问题(本框架中省略);
  • 第三步:发送令牌(为了防止恶意尝试,需要有图形验证码);
  • 第四步:修改密码(令牌 + 新密码);
  • 第五步:记录日志。
  • 支持修改密码提醒
  • 防止密码被暴力破解:采用 bcrypt 慢哈希函数。

    关于防止密码被暴力破解基础知识和实现原理可参照 CodingEX 中的相关章节

修改密码

修改密码是用户在登录状态下的操作,后台逻辑要确保对授权 Token 有效性的检验。

  • 新密码不能和原密码一致。
  • 密码强度策略:至少1个大写字母、1个小写字母、1个数字、8个字符;
  • 提供密码强度提示(高、中、低)。
  • 支持修改密码提醒

账号绑定与解绑

邮箱和手机号均可以在个人中心完成解绑和再绑定。

  • 绑定新账号需要账号有效性验证(同注册)。
  • 解绑需要令牌验证;令牌发送需要图形验证码。
  • 邮箱和手机号至少存在一个,不能同时解绑。

微信绑定流程

微信可以在个人中心完成绑定和换绑。

  • 绑定账号之前需要向微信平台校验账号有效性。
  • 绑定账号需要校验是否被其他账号所绑定。 importing-data-sample

微信登录流程

  • 当在个人中心绑定微信之后,可用微信扫码直接登录 importing-data-sample

微信小程序登录

importing-data-sample

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: 微信小程序认证授权