由于您对此选项感兴趣,我决定将我的评论移至此答案。
首先,IdentityServer
不是您的应用程序表的位置。这些是单独的上下文和单独的迁移。首选方法是保持关注点分离。
正如我在回答中所解释的here https://stackoverflow.com/questions/48352259/ef-core-relationships-containing-external-identity/48366840#48366840,您不需要登录用户和您的业务上下文之间的关系。相反,在业务上下文中创建用户。登录用户的目的与业务用户不同。
我没有给您的代码,但您可以从以下位置获取示例应用程序之一IdentityServer
。调整 API 以使用您的业务上下文。在该上下文中添加一个用户表(链接到sub
声明)以及业务上下文所需的字段。顺便说一句,表是否位于同一个数据库中并不重要,只是不要混合上下文。
In IdentityServer
:如果用户可以注册一个网站,那么您可以扩展该网站报名表格带有可用网站的下拉菜单。或者如果用户可以注册多个网站,则提供一个列表。
现在这取决于所选择的策略。您可以等待在 API 中注册用户,但我认为直接注册用户要容易得多。还有其他选项,但这里是 IdentityServer 配置的一部分(不向 IdentityServer 添加业务逻辑):
Extend IdentityServer
注册用户后调用API。为此,我将在IdentityServer
包含要在每个网站上注册的 URL 的上下文。创建登录用户后,调用配置的API来注册业务用户。
在 API 中,您需要添加以下方法:IdentityServer
可以调用创建用户,链接到sub
声明并包含所需的用户信息。这样你就可以满足sub
声称识别登录用户并将其链接到业务用户。
您可以对客户端应用程序使用类似的策略。延长IdentityServer
使用 API 方法允许客户端应用程序注册用户。
如果您想撤回访问权限,可以删除登录用户,而无需删除业务用户。如果你不想破坏历史信息,你就不会想要这样。您还可以使用声明来指定用户是否有权访问该网站,而无需删除登录用户。