Identityserver4 在实施IProfileService时支持“两个帐户”登录

Identityserver4 在实施IProfileService时支持“两个帐户”登录,identityserver4,Identityserver4,我们正在尝试将IdentityServer4集成到我们希望合并两个登录帐户的设施中,而不是传统意义上的2FA。用户将预先登录到建筑物中物理位置固定的计算机上的Windows服务帐户。他们将自动通过IS4身份验证,服务帐户为。然后,用户将在web应用程序表单中使用其个人Active Directory凭据登录,如IS4 quickstart登录表单。这将使我们能够根据用户的身份和位置授予更细粒度的权限 我们正在尝试实现调用一个需要两个帐户ID的内部API。我们在GetProfileDataAsyn

我们正在尝试将IdentityServer4集成到我们希望合并两个登录帐户的设施中,而不是传统意义上的2FA。用户将预先登录到建筑物中物理位置固定的计算机上的Windows服务帐户。他们将自动通过IS4身份验证,服务帐户为。然后,用户将在web应用程序表单中使用其个人Active Directory凭据登录,如IS4 quickstart登录表单。这将使我们能够根据用户的身份和位置授予更细粒度的权限

我们正在尝试实现调用一个需要两个帐户ID的内部API。我们在GetProfileDataAsync中对该内部API的响应中发出的声明应该是两个帐户权限重叠的结果。IsUserActiveAsync应验证服务帐户和用户帐户是否都处于活动状态


我们如何从IProfileService的实现中访问这两个帐户ID?传递给IProfileService方法的ClaimsPrincipal类型的子参数似乎只支持单个帐户。IS4开箱即用支持这种类型的环境,还是需要一些定制?

这些只是假设,但在我看来,服务帐户实际上不是真正的用户帐户,而是计算机帐户。因此,它实际上不是识别用户,而是识别计算机。从你所写的来看,似乎只有位置才是最重要的

我想这可能就是你的答案。因为您可以为计算机/用户创建自定义登录。将信息合并到一个访问令牌中

另一种方法是查看ip地址。但这仅在计算机具有固定且已知的ip地址时有效

这两个选项都将用户绑定到该位置


权限不应作为设置的一部分,以保持访问令牌较小,尽管IdentityServer具有这样做的结构。相反,您可能希望查看处理权限的授权服务器,如。在这种情况下,如果经过验证,您可以使用计算机的Windows用户名、部分令牌或ip地址以及用户id来获取用户在该位置的权限。

我们使用的解决方案是修改登录流,以立即执行透明的Windows身份验证,然后是用户名/密码认证。在用户名/密码身份验证期间,我们将Windows身份验证的用户名缓存在自定义声明中,以便在IProfileService的主体中可以访问服务帐户和用户帐户