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

在auth服务器或资源服务器中存储用户数据?还是两者兼而有之?

慕朝明
2023-03-14

这是我第一次使用IdentityServer4和AspNetIdentity设置OpenID Connect,我希望有人能揭开关于存储用户数据的神秘面纱。

到目前为止,我读到的是,用户数据应该存储在连接到Auth服务器的Auth db中,但我真的希望将用户数据存储在连接到资源服务器的资源db中。

我目前有一个如下所示的数据模型:

还有人说,与Auth无关的数据,如用户的城市或国家,不应该存储在Auth数据库中。相反,只在auth服务器中保留与auth相关的数据,而在资源DB中保留与用户相关的数据。这听起来像是两个用户记录需要同步?听起来是个坏主意。

将资源服务器和Auth服务器作为一个应用程序,这样我们就可以在用户、主机和事件之间建立必要的关系。但这似乎挫败了使用OpenID Connect的全部目的。

那么这里的标准架构是什么呢?或者,如果没有一种适用于所有人的方法,您将如何存储这些用户数据?

共有1个答案

轩辕季同
2023-03-14

考虑到分门别类的关注和单一的责任:

不是只有一个用户表。表中的字段仅在上下文中有意义。

用户可以有一个谷歌账户来登录,但对于企业来说,这不是你可以联系到员工的账户。如何在不属于上下文的报告中显示信息?假设您将city存储在identity上下文中。那么如何在报告中显示这些信息呢?您将需要业务上下文中的信息。

还要考虑标识上下文是否是存储信息的好地方。因为用户在控制之中。当用户不同意使用信息,或者只是删除帐户时,会发生什么?当您想要同步数据时,应该使用什么策略?

seperate context最好的部分是,在上下文中可以创建表之间的关系,而不会干扰其他上下文。如果您愿意,您可以轻松地切换到不同的oidc提供商。但是一旦你开始混合上下文,就没有退路了。

在oidc中非常有用的一件事是sub声明。只需通过sub声明查找用户,并为业务上下文使用本地id。

关于identity上下文中的字段citycountry:有多个级别的身份验证,因此您实际上可能需要此上下文中的信息。但是,如果您需要其他上下文中的信息(例如,为了在报告中显示),那么应该将其添加到其他上下文中(以及)。

 类似资料:
  • 我需要了解在我的项目范围内使用autheorizaion服务器的便利性。 我们正在实现我们的服务并将其部署到客户环境中。 客户基础结构已经提供了一种身份验证机制,以便对用户进行身份验证。 此机制拦截所有通信并将用户重定向到“登录”表单。 之后,用户被重定向到我们的服务,我们必须处理和消化它,并使用JWT令牌进行响应。 这是我感到迷茫的地方: 我在想: 使用Spring oauth2 向授权服务器请

  • 我们正在开发一个微服务架构中的应用程序,该应用程序在多个OAuth2提供商(如Google和Facebook)上使用Spring Cloud OAuth2实现登录。我们还在开发自己的授权服务器,并将在下一个版本中集成。 现在,在我们的微服务(即资源服务器)上,我想知道如何处理多个< code>token-info-uri或< code>user-info-uri到多个授权服务器(例如脸书或谷歌)。

  • 我们的项目中使用的是Spring Cloud config server,它有多个微服务。配置服务器就绪后,我们现在将所有微服务的所有属性存储在一个中央git存储库中。每个微服务能够根据应用程序名称和配置文件提取自己的属性文件。我们试图将资源包存储在中央存储库中,并让config-server将这些资源包提供给微服务。我们的资源包包括属性文件,如messages_en.properties、mes

  • 问题内容: 我们已经设置了OAuth2授权服务器,因此我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security- oauth/wiki/oAuth2#resource-server-configuration 应该

  • 我们已经设置了一个OAuth2授权服务器,所以我需要创建一个相应的资源服务器(单独的服务器)。我们计划使用Spring Security OAuth2项目。他们关于设置资源服务器的文档: https://github.com/spring-projects/spring-security-oauth/wiki/oauth2#资源-服务器-配置 应该指向令牌处理bean。然而,令牌处理似乎是由服务器

  • 我有以下场景:一个客户端应用程序试图访问API网关后面的APIendpoint。我想验证(使用id和秘密)应用程序,如果它是应用程序A允许它访问endpoint/信用,如果它是应用程序B允许它访问endpoint/借方。 我假设API网关应该验证一个调用是否应该被拒绝。你能告诉我我的工作流应该是什么样子,我应该使用什么Keycloak功能吗?