请仔细阅读这篇文章,因为我很确定人们会回答与我所问的问题不同的问题。
我有一个IdentityServer4服务器,它允许用户三种身份验证方法(我们目前有多个真实来源):自定义(SQL中的userid/pwd),ldap (AD中的用户/pwd)和集成窗口(不需要密码)。这些都很好用,当我在我的客户端MVC应用程序中时,我可以获得标识和声明,而不管我使用哪种方法进行身份验证。
我的问题是,我如何了解哪个用户登录到了服务器(而不是客户端MVC!)。我可以看到服务器正在维护cookie,它必须包含此信息。请记住,User.Identity.Name
会在“登录”到我的软件之前返回Windows身份验证信息。也就是说,User.Identity.IsAuthenticated
总是返回true
。他们可能会继续选择SQL身份验证方法。
我猜这与HttpContext.Authentication.GetAuthenticationInfoAsync
有关,但我不清楚要传入哪个authenticationScheme
,因为对SignInAsync
的最后一次调用调用了一个重载,但没有指定。
发布于 2017-08-03 16:04:36
好了,我明白这里发生了什么了。我检查用户是否在服务器上通过身份验证的方法是检查sub
声明。只有在他们通过了身份验证过程后才会出现。
var sub = User.FindFirst(JwtClaimType.Subject)?.value;
如果这是null,那么我知道它们没有经过身份验证。如果它不是空的,那么我知道我可以读取JtwClaimType.Name
,并且它不是他们的Windows认证的帐户名。
https://stackoverflow.com/questions/45487496
复制