【发布时间】:2016-05-19 07:35:47
【问题描述】:
我正在尝试从现有应用程序设计具有非常标准用户管理的微服务:具有身份验证和授权,并存储用户数据。
我正在开发一个授权服务器,以使用OAuth2 作为授权来管理用户身份验证和授权。另一方面,我必须存储用户的信息/个人资料。
问题:应该授权服务器管理:
-
授权和用户 API? 因此其他微服务可以通过
/me联系授权服务器 获取当前用户,也可以通过/users获取完整用户列表。 -
或者只有授权并且我必须创建用户微服务?因此授权服务器只公开与用户和用户微服务相关的
/meAPI 会暴露/users?
第一个解决方案稍微简单一些,但授权服务器将变得不那么通用(不那么可重用),因为用户应用程序数据模型将成为其中的一部分(User 表的数据库数据模型)。
另一个要求是授权服务器在授权之前应该检查用户是否存在。
没有用户自动创建,用户必须由 管理员 邀请才能获得访问权限。 有了这个要求,第一个解决方案很简单,因为 授权服务器 可以访问用户数据库,但第二个解决方案 授权服务器 意味着:
- 与用户服务共享数据库(哼不喜欢那样)
- 在使用 REST API 授权之前调用用户服务(例如)
-
授权服务器应维护最少的
User表(可以重命名为Account),并且管理员不会在用户服务上创建用户,而只会在授权服务器上创建用户帐户
我认为 1. 解决方案已经出炉,但有什么关于 2. 和 3. 的建议吗?
3. 首先似乎是最好的,但如果我想切换到另一个授权服务器,例如像 Google、Github 这样的公共服务器 (OAuth2), Facebook 等...安全性可能会受到影响,因为我们无法控制用户帐户的创建。
有什么反馈吗?
【问题讨论】:
-
您如何管理身份验证?
-
外部服务(基于CAS)负责认证。但我不是这项服务的所有者。但是,您可以简单地使用基于数据库用户信息的基本表单身份验证
标签: microservices