授权和用户微服务设计

时间:2016-02-09 10:46:09

标签: microservices

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

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

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

  • 授权和用户API?因此,其他微服务可以联系/me上的授权服务器以获取当前用户,但/users也可以用户列表。
  • 或仅授权,我必须创建用户微服务因此授权服务器仅公开与用户相关的/me API和用户微服务将公开/users

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

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

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

  1. 用户服务共享数据库(哼哼不喜欢)
  2. 在使用REST API授权之前调用用户服务(例如)
  3. 授权服务器应保留最少的User表(可以重命名为Account),管理员不会在用户服务上创建用户,而只会创建用户授权服务器上的帐户
  4. 我认为 1。解决方案已解决,但有关 2。 3。的任何建议?

    首先,

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

    有任何反馈吗?

2 个答案:

答案 0 :(得分:1)

据我所知,OAuth2只会授予您授权。但我已经看到一些将OAuth2与其他协议/技术相结合的解决方案,例如Oauth2 + OpenID Connect(OIDC)。

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

答案 1 :(得分:-1)

此处有多个选项,因此请提供更多详细信息。例如您是否能够使用现成的授权服务器实现(开源)?你基于什么技术?

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

一般而言 - RFC为OAuth2.0所要求的实现授权服务(详情请参阅https://tools.ietf.org/html/rfc6749)绝非易事。而是在需要时使用经过验证的解决方案。

问候!