在 IdentityServer4 *SERVER* 上确定身份

Determine identity on IdentityServer4 *SERVER*

请仔细阅读这篇文章,因为我很确定人们会回答与我所问的问题不同的问题。

我有一个 IdentityServer4 服务器,它允许用户使用三种身份验证方法(目前我们有多个真实来源):自定义(SQL 中的userid/pwd)、ldap(user/pwd 在 AD 中)并集成 windows(无需密码)。这些工作很好,当我在我的客户端 MVC 应用程序中时,无论我使用哪种方法进行身份验证,我都可以获得身份和声明。

我的问题是如何了解哪个用户已登录到服务器(而不是客户端 MVC!)。我可以看到服务器正在维护 cookie,其中必须包含此信息。请记住,User.Identity.Name 会 return Windows 身份验证信息,然后才能 'logged in' 我的软件。即 User.Identity.IsAuthenticated 总是 returns true。他们可能会继续选择 SQL 身份验证方法。

我猜这与 HttpContext.Authentication.GetAuthenticationInfoAsync 有关,但我不清楚要传入什么 authenticationScheme,因为最后一次调用 SignInAsync 调用了未指定的重载。

好的,我现在明白这是怎么回事了。我检查用户是否在服务器上通过身份验证的方法是检查 sub 声明。只有在他们通过身份验证过程后才会出现。

var sub = User.FindFirst(JwtClaimType.Subject)?.value;

如果那是空的,那么我知道他们没有通过身份验证。如果它不为空,那么我知道我可以阅读 JtwClaimType.Name 而它不是他们的 Windows 经过身份验证的帐户名。