将来自 IdP 的用户数据与应用程序数据库同步
Sync user data from IdP with application database
我们目前正在使用 DDD 原则开发 SaaS 平台(具有 React 前端和 ASP.NET Restful API 后端)。
我们还使用我们自己的身份提供者(使用 IdentityServer4)。
所有与 IdP 相关的数据都存储在其自己的独立数据库中(用户、声明、资源...)。
现在有一个我们无法解决的问题:
每当用户使用我们的 IdP 登录我们的 SaaS 平台时,我们希望在我们的应用程序数据库中存储一些用户数据(ID、语言、电子邮件和姓名)。这是因为我们要确保用户和其他域实体之间的引用完整性。
存储这个的另一个原因是因为我们需要从我们的域访问用户的语言(发送电子邮件等)。
所以我们可以做的是读取用户的声明并将其存储在我们的数据库中。
但除此之外,每当用户在 IdP 中更改任何此数据(假设用户更新他的语言)时,我们还需要在我们的应用程序数据库中更新此数据(因为我们希望用户在他们的设置语言)。
我正在考虑创建一个中间件,在用户执行 API 调用时检查所有 UserClaims,但这意味着我们必须不断地对每个 API 打电话。
在 IdP 和另一个数据库之间同步用户数据而无需手动执行的最佳方法是什么?
您的应用程序可以查询 IdentityServer UserInfo 端点,也许每次他登录(或更改他的用户配置文件?)并将信息存储在本地数据库中。
问题还在于您的申请和 IDP 之间可以接受多少“最终一致性”?
一个选项是启用此功能,当您更改用户配置文件时,您可以使用刷新令牌获取新的访问令牌。
UpdateAccessTokenClaimsOnRefresh
Gets or sets a value indicating whether the access token
(and its claims) should be updated on a refresh token request.
你可以阅读它 here:
我们目前正在使用 DDD 原则开发 SaaS 平台(具有 React 前端和 ASP.NET Restful API 后端)。 我们还使用我们自己的身份提供者(使用 IdentityServer4)。
所有与 IdP 相关的数据都存储在其自己的独立数据库中(用户、声明、资源...)。
现在有一个我们无法解决的问题:
每当用户使用我们的 IdP 登录我们的 SaaS 平台时,我们希望在我们的应用程序数据库中存储一些用户数据(ID、语言、电子邮件和姓名)。这是因为我们要确保用户和其他域实体之间的引用完整性。
存储这个的另一个原因是因为我们需要从我们的域访问用户的语言(发送电子邮件等)。
所以我们可以做的是读取用户的声明并将其存储在我们的数据库中。 但除此之外,每当用户在 IdP 中更改任何此数据(假设用户更新他的语言)时,我们还需要在我们的应用程序数据库中更新此数据(因为我们希望用户在他们的设置语言)。
我正在考虑创建一个中间件,在用户执行 API 调用时检查所有 UserClaims,但这意味着我们必须不断地对每个 API 打电话。
在 IdP 和另一个数据库之间同步用户数据而无需手动执行的最佳方法是什么?
您的应用程序可以查询 IdentityServer UserInfo 端点,也许每次他登录(或更改他的用户配置文件?)并将信息存储在本地数据库中。
问题还在于您的申请和 IDP 之间可以接受多少“最终一致性”?
一个选项是启用此功能,当您更改用户配置文件时,您可以使用刷新令牌获取新的访问令牌。
UpdateAccessTokenClaimsOnRefresh
Gets or sets a value indicating whether the access token
(and its claims) should be updated on a refresh token request.
你可以阅读它 here: