当前位置: 首页 > 编程语言 > C#

Thread.CurrentPrincipal已认证,但ClaimsPrincipal.Current未共享

时间:2023-04-10 18:08:34 C#

方法检查当前身份是否已认证。当我使用ClaimsPrincipal.Current时,当前身份未通过身份验证,但当我使用Thread.CurrentPrincipal时,它是。声明主体.Current.Identity.IsAuthenticated;//假Thread.CurrentPrincipal.Identity.IsAuthenticated;//True这看起来很奇怪,特别是因为MSDN说ClaimsPrincipal.Current只返回Thread.CurrentPrincipal:注意默认情况下,Thread。现任校长。您可以通过设置ClaimsPrincipalSelector属性来指定要调用的委托来确定当前委托人,从而更改此行为。有人可以解释为什么ClaimsPrincipal没有经过身份验证,理论上两者都包含相同的身份吗?简而言之,当他们说它默认返回Thread.CurrentPrincipal时,文档是不正确的。它实际返回的是一个ClaimsPrincipal包装Thread.CurrentPrincipal(如果它实际上还不是一个ClaimsPrincipal),使用这个构造函数:publicClaimsPrincipal(IPrincipalprincipal){this.m_version="1.0";this.m_identities=newList();if(principal==null){thrownewArgumentNullException("principal");}ClaimsPrincipalprincipal2=principalasClaimsPrincipal;if(principal2==null){this.m_identities.Add(newClaimsIdentity(principal.Identity));}elseif(principal2.Identities!=null){this.m_identities.AddRange(principal2.Identities);正如您所期望的那样,它又返回一个包含委托人身份的ClaimsIdentity(同样,如果不是,实际上已经是一个ClaimsIdentity)。在构建ClaimsIdentity时,我唯一能看到它最终没有设置身份验证类型(从而创建未经身份验证的身份)的地方是:if(identityisWindowsIdentity){}catch(UnauthorizedAccessException){this.m_authenticationType=null;因此,如果您通过Thread.CurrentPrincipal.Identity访问的身份实际上是一个WindowsIdentity实例,并且您在运行的上下文中具有受限权限,则构造的ClaimsIdentity实例将IsAuthenticated设置为false。以上就是C#学习教程:Thread.CurrentPrincipal已经通过认证,但是ClaimsPrincipal.Current并不是分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处: