我正在尝试使用非常标准的用户管理从现有应用程序设计微服务:具有身份验证和授权,并存储用户数据。
我正在开发授权服务器以使用OAuth2
作为授权来管理用户身份验证和授权。另一方面,我必须存储用户的信息/个人资料。
问题 授权服务器应该管理:
/me
上的授权服务器以获取当前用户,但/users
也可以用户列表。/me
API和用户微服务将公开/users
?第一个解决方案稍微简单但授权服务器将变得不那么通用(更少可重用),因为用户应用程序数据模型将成为其中的一部分(User
表的数据库数据模型)。
另一个要求是 授权服务器应该在授权之前检查用户是否存在。
没有用户自动创建,管理员必须邀请用户才能访问。 有了这个要求,第一个解决方案很简单,因为授权服务器可以访问用户数据库,但第二个解决方案授权服务器意味着:
User
表(可以重命名为Account
),管理员不会在用户服务上创建用户,而只会创建用户授权服务器上的帐户 我认为 1。解决方案已解决,但有关 2。和 3。的任何建议?
首先,3。似乎是最好的,但如果我想切换到另一个授权服务器,例如Google,Github等公共服务器(OAuth2), Facebook等等......安全性可能会受到影响,因为我们无法控制用户帐户的创建。
有任何反馈吗?
答案 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)绝非易事。而是在需要时使用经过验证的解决方案。
问候!