译见|构建用户管理微服务(一):定义领域模型和 REST API

译见系列  道客船长「译见」系列,关注国外云计算领域的技术和前沿趋势,每周为开发者提供精选译文。

近期我们将持续更新《构建用户管理微服务》系列文章,敬请关注!

在《构建用户管理微服务》的第一部分中,我们会定义应用的需求,初始的领域模型和供前端使用的 REST API。 我们首先定义用户注册管理用户的故事。
2

用户故事

在设计新系统时,值得考虑的是用户希望实现的结果。 下面您可以找到用户注册系统应具有的基本功能的列表。

  • 作为用户,我想注册,以便我可以访问需要注册的内容
  • 作为用户,我想在注册后确认我的电子邮件地址
  • 作为用户,我想登录并注销
  • 作为用户,我想更改我的密码
  • 作为用户,我想更改我的电子邮件地址
  • 作为用户,我想要重置我的密码,以便我忘记密码后可以登录
  • 作为用户,我想更新我的个人资料,以便我可以提供我正确的联络资料
  • 作为用户,我想关闭我的帐户,以便我可以关闭我与我注册的服务的关系
  • 作为管理员,我想手动管理(创建/删除/更新)用户,以便工作人员不必重新进行注册过程
  • 作为管理员,我想手动创建用户,这样工作人员就不用再过注册过程了
  • 作为管理员,我想列出所有用户,即使是那些曾经关闭帐户的用户
  • 作为管理员,我希望能够看到用户的活动(登录,注销,密码重置,确认,个人资料更新),以便我可以遵守外部审计要求

工作流程

我们来看看系统将要支持什么样的工作流程。首先,人们应该能够注册和登录,这些是相当明显的功能。

1

但是,处理确认令牌时需要谨慎。 由于它们可用于执行特权操作,因此我们使用一次性随机令牌来处理密码重置和电子邮件确认。

当一个新的令牌由用户生成,无论什么原因,所有以前的都是无效的。 当有人记住他们的密码时,以前发出的和有效的密码重置令牌必须过期。

非功能性需求

用户故事通常不会定义非功能性要求,例如安全性,开发原理,技术栈等。所以我们在这里单独列出。

  • 领域模型是使用域驱动的设计原则在纯 Java 中实现的,并且独立于要使用的底层技术栈
  • 当用户登录时,将为他们生成一个 JWT 令牌,有效期是 24 小时。在后续请求中包含此令牌,用户可以执行需要身份验证的操作
  • 密码重置令牌有效期为 10 分钟,电子邮件地址确认令牌为一天
  • 密码用加密算法(Bcrypt)加密,并且每用户加盐
  • 提供了 RESTful API,用于与用户注册服务进行交互
  • 应用程序将具有模块化设计,以便能够为各种场景提供单独的部署工件(例如,针对 Google App Engine 的 2.5 servlet 兼容 WAR 和其他用例的基于 Spring Boot 的自包含可执行 JAR)
  • 实体标识符以数据库无关的方式生成,也就是说,不会使用数据库特定机制(AUTO_INCREMENT 或序列)来获取下一个 ID 值。解决方案将类似于 Instagram genetes ID。

领域模型

对于第一轮实现中,我们只关注三个实体,即用户,确认令牌和用户事件。

0

rest api

访问下面的大多数 API 都需要认证,否则返回一个 UNAUTHORIZED 状态码。 如果用户尝试查询属于某个其他用户的实体,则他们还会返回客户端错误(FORBIDDEN),除非他具有管理权限。 如果指定的实体不存在,则调用的端点返回 NOT_FOUND。

创建会话(POST /sessions)和注册新用户(POST / users)是公开的,它们不需要身份验证。

Session management

如果没有给定 ID 的会话或者会话已经过期,则返回给定会话的详细信息或 NOT_FOUND。

创建新会话,前提是指定的电子邮件和密码对属于一个有效的用户。

删除给定的会话(注销)。

User management

根据一个指定的 ID 查找用户。

列举系统中所有的用户。

注册一个新的用户。

删除指定的用户。

更新指定用户的个人信息。

使用给定用户的令牌执行与令牌类型相关的操作。

原文链接:https://springuni.com/user-management-microservice-part-1

下期内容:构建用户管理微服务(二):实现领域模型

Leave a Reply

Your email address will not be published. Required fields are marked *