当前位置: 首页 > 知识库问答 >
问题:

授权和用户微服务设计

越胤
2023-03-14

我正试图从现有的应用程序中设计一个具有相当标准的用户管理的微服务:具有认证和授权,并存储用户数据。

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

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

  • 授权和用户API?因此,其他微服务可以联系/me上的授权服务器以获取当前用户,也可以联系/user以获取完整的用户列表。
  • 还是只有授权,我必须创建用户微服务?因此授权服务器只公开与用户相关的/meAPI,用户微服务会公开/user

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

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

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

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

我认为1.解决方案已经出来了,但关于2.和3.的建议呢。?

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

有什么反馈吗?

共有2个答案

齐成双
2023-03-14

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

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

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

问候!

宗政深
2023-03-14

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

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

 类似资料:
  • 我有两个Spring启动应用程序。后端部分-可以访问数据库,它用作Rest API和管理面板。前端部分-使用Rest API为客户端显示信息。 因此,我对客户端(前端)的配置安全性有问题,对管理面板也有问题,授权是通过会话实现的。以前,客户端部分的授权是通过JWT令牌实现的,但我不太明白如何为每个客户端存储令牌,并在向Rest API发送请求时使用它。 这是我的安全配置: 那么,可以使用JWT令牌

  • 我有一个多租户项目,它将调用多个微服务来执行特定任务。 我希望微服务从发送的请求中了解要使用哪个DB,因为每个租户都将使用微服务,但是,租户将拥有自己的DB。我有另一个解决方案,它有一个处理API密钥管理的Web项目。 比方说,API密钥管理位于域:portal.example.com 当 tenant.example.com 在 microservice.example.com 调用微服务时,我

  • 假设我已经有入口点(api网关)来处理身份验证和发布JWT令牌。然后用户用这个令牌调用某个APIendpoint。到目前为止,一切都很清楚。现在--这个endpoint需要与另一个微服务通信。该微服务必须获得授权信息(角色等)。另外-这个通道是异步的(JMS/Kafka),这意味着处理可能会被dalayed... 我也在考虑其他情况:我们有两个服务A和B,它们都公开可能被外部用户访问的API(JW

  • 我正在研究使用GMail API为我们的一个系统以编程方式发送电子邮件。我认为我需要创建一个服务帐户,然后将其设置为具有域范围的访问权限,以便授权发送电子邮件(因此电子邮件似乎来自实际用户,而不是我的程序)。我的问题是,如果我走这条路,有没有办法阻止某些用户,这样服务帐户就不能为他们“委派”?例如,我希望能够为我们的销售团队生成和发送电子邮件,但我不希望api能够为我们的高级管理人员生成任何电子邮

  • 我们正在尝试找出IPC身份验证和授权的最佳实践。我会解释的。我们有一个基于微服务的体系结构SaaS和一个专门的认证服务。该服务负责执行身份验证和管理身份验证令牌(JWT)。 现在的问题是如何验证和授权由其他服务发起的请求(没有特定用户的上下文)? 我们是否应该为每个服务生成一个专用用户,并像对待系统中的任何其他用户一样对待它(具有适当的权限)? 我们是否应该在服务之间部署“硬编码”/动态令牌? 还

  • 我最近读了不少关于微服务的文章,尤其是关于AuthN和Authz的文章。在很大程度上,这一切都很有意义,我可以看到这一切应该如何工作。 (注意--现在我只实现了客户端凭据授予和资源所有者密码凭据授予,因为我只是想看看它是如何工作的,而且用curl调用它们更容易。但我不知道这有什么不同)