【问题标题】:Authorization and user microservices design授权和用户微服务设计
【发布时间】:2016-05-19 07:35:47
【问题描述】:

我正在尝试从现有应用程序设计具有非常标准用户管理的微服务:具有身份验证和授权,并存储用户数据。

我正在开发一个授权服务器,以使用OAuth2 作为授权来管理用户身份验证授权。另一方面,我必须存储用户的信息/个人资料。

问题:应该授权服务器管理:

  • 授权和用户 API? 因此其他微服务可以通过/me 联系授权服务器 获取当前用户,也可以通过/users 获取完整用户列表。
  • 或者只有授权并且我必须创建用户微服务因此授权服务器只公开与用户和用户微服务相关的/me API 会暴露/users

第一个解决方案稍微简单一些,但授权服务器将变得不那么通用(不那么可重用),因为用户应用程序数据模型将成为其中的一部分(User 表的数据库数据模型)。


另一个要求是授权服务器在授权之前应该检查用户是否存在

没有用户自动创建,用户必须由 管理员 邀请才能获得访问权限。 有了这个要求,第一个解决方案很简单,因为 授权服务器 可以访问用户数据库,但第二个解决方案 授权服务器 意味着:

  1. 用户服务共享数据库(哼不喜欢那样)
  2. 在使用 REST API 授权之前调用用户服务(例如)
  3. 授权服务器应维护最少的User 表(可以重命名为Account),并且管理员不会在用户服务上创建用户,而只会在授权服务器上创建用户帐户

我认为 1. 解决方案已经出炉,但有什么关于 2.3. 的建议吗?

3. 首先似乎是最好的,但如果我想切换到另一个授权服务器,例如像 Google、Github 这样的公共服务器 (OAuth2), Facebook 等...安全性可能会受到影响,因为我们无法控制用户帐户的创建。

有什么反馈吗?

【问题讨论】:

  • 您如何管理身份验证?
  • 外部服务(基于CAS)负责认证。但我不是这项服务的所有者。但是,您可以简单地使用基于数据库用户信息的基本表单身份验证

标签: microservices


【解决方案1】:

这里有多个选项,因此请提供更多详细信息。例如您可以使用现成的授权服务器实现(开源)吗?您基于什么技术?

我能够轻松集成 IdentityServer (https://github.com/IdentityServer/IdentityServer3),并通过几个接口的简单实现将其插入到自己的“用户”服务中。它还可以为您处理数据库工作(为 OAuth 2.0 存储所有数据,例如具有秘密、身份验证代码等的客户端)。 IdentityServer 允许您提供自己的链接以使用户可以使用“注册”操作,您还可以让管理员接受或拒绝注册,因此只有接受的用户才能登录。

一般来说 - 实现 RFC 要求的 OAuth2.0 授权服务(有关详细信息,请参阅https://www.rfc-editor.org/rfc/rfc6749)绝不是小菜一碟。而是在需要时使用经过验证的解决方案。

问候!

【讨论】:

    【解决方案2】:

    据我所知,OAuth2 只会给你授权。但是我已经看到了一些将 OAuth2 与另一种协议/技术相结合的解决方案,例如Oauth2 + OpenID 连接 (OIDC)。

    为了回答您的问题,我的经验表明最好将身份验证与授权分开,因为我可能是不同的服务(或提供者)。您可以将 Google 或 Github 用于 OAuth2,或将 AWS Cognito 用于 Auth2+OpenIDConnect。另一个拥有这两种常用技术 (OAuth2+OIDC) 的已知 Provider 是 Okta。

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2018-10-12
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 2015-07-24
      • 2017-12-13
      • 2019-07-09
      • 2020-09-27
      相关资源
      最近更新 更多