【发布时间】:2022-01-18 17:43:35
【问题描述】:
起初,该应用程序拥有能够使用 ASP.Identity + IdentityServer4 (OpenId Connect) 进行身份验证的常规用户。
后来添加了Employees和Student,它们是不同数据库中的不同实体。
现在我需要有 2 个独立的移动应用程序,一个用于员工,一个用于学生,都具有 oAuth 身份验证。
有没有办法让 IDSrv4 和 ASP.Identity 的单个实例可以处理这 3 种用户类型的身份验证,但不必将它们全部合并到一个数据库表中?它们有完全不同的要求,登录详细信息可能重叠,因此需要保留在具有不同登录表单的单独数据库/表中。
这些用户最终将共享范围(需要访问共享 api)。
每种类型的主题会有所不同,即:user-1 vs employee-1 vs student-1。
我试图避免的可能解决方案:
- 拥有单独的 IDSrv4 实例来验证每种用户类型
- 将所有 3 种用户类型合并到 1 个单个表中并使用单个 IDSrv4 实例
【问题讨论】:
-
您可以拥有 1 个 IdSrv4 和多个具有不同范围配置的客户端配置,您可以对其应用不同的策略,但这要求所有用户都必须在 IdSrv4 数据库中。
-
我不同意 - IDS4 不关心用户的存储方式或位置 - 只要您能够根据给定的上下文确定要转到哪个数据库可以做你喜欢的事。痛苦在于让 ASP.Net Identity 以你想要的方式工作——你可能不得不放弃它并推出你自己的等效功能。
-
谢谢,这就是我的假设。我会做一些 asp.net 身份实验,看看效果如何。 @Eldar:谢谢,这就是我要避免的。
-
我看到有一种方法可以为每种用户类型使用不同的 cookie 身份验证方案,并且通过实现不同的登录名并针对特定方案进行身份验证,效果很好。问题是 IDS4 在检查用户是否经过身份验证时,它使用默认 cookie 方案或 IDS4 配置中的一组。我找不到解决方法。能够为每个客户端设置 cookie 方案会很棒。
-
目前,使用 IDS4 似乎很难做到这一点,因为它不支持多会话场景。我似乎越来越需要为每种用户类型运行单独的 IDS4 服务。
标签: c# asp.net asp.net-core asp.net-identity identityserver4