Oauth 2.0 Azure AD B2C:User.Identity.Name为null,但User.Identity.m_实例_声称[9]具有该名称

Oauth 2.0 Azure AD B2C:User.Identity.Name为null,但User.Identity.m_实例_声称[9]具有该名称,oauth-2.0,azure-active-directory,azure-ad-b2c,Oauth 2.0,Azure Active Directory,Azure Ad B2c,在用户通过身份验证进入我的Azure AD B2C web应用程序后,我尝试检索user.Identity.Name;但是,它是空的。然而,User.Identity.m_instance_声称[9],如下面的屏幕截图所示,确实有正确的名称 这怎么可能?如何获取User.Identity.Name=User.Identity.m\u实例\u声明[9]? (请注意,后者是一个私有变量,不能用作User.Identity.Name的替代品。)。 更新 我还将以下内容添加到Web.config文件

在用户通过身份验证进入我的Azure AD B2C web应用程序后,我尝试检索
user.Identity.Name
;但是,它是空的。然而,
User.Identity.m_instance_声称[9]
,如下面的屏幕截图所示,确实有正确的名称

这怎么可能?如何获取
User.Identity.Name
=
User.Identity.m\u实例\u声明[9]

(请注意,后者是一个私有变量,不能用作
User.Identity.Name
的替代品。)。


更新

我还将以下内容添加到
Web.config
文件中:

<configuration>  
  <configSections>  
    <!--WIF 4.5 sections -->  
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>  
  </configSections>  

...

  <system.identityModel>
    <identityConfiguration>
      <securityTokenHandlers>
        <add type="System.IdentityModel.Tokens.SamlSecurityTokenHandler, System.IdentityModel">
          <samlSecurityTokenRequirement>
            <nameClaimType value="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" />
          </samlSecurityTokenRequirement>
        </add>
      </securityTokenHandlers>
    </identityConfiguration>
  </system.identityModel>
</configuration>

...

不幸的是,这仍然会导致
User.Identity.Name=null

我相信您需要在web.config中设置正确的nameClaimType:


更新

除上述代码外,还缺少以下代码:

//指定要验证的声明
TokenValidationParameters=新的TokenValidationParameters
{
NameClaimType=“name”
},

有关如何使用上述内容的信息,请参阅。

谢谢您的建议。我尝试了此操作,但发现错误“配置节'system.identityModel'无法读取,因为它缺少节声明”。这对.NET Framework 4.7.1有效吗?根据这个答案,我的配置文件中已经有一个非空部分,这应该可以防止出现错误。您需要在configSections下声明该部分。请参见此处示例的顶部。感谢您提供第二个链接-它肯定消除了错误!但是,我仍然在正在查看
User.Identity.Name=null
。我已更新原始问题以包含编辑内容(因为它们太长,无法放在此处)。如果我仍然缺少某些内容,请告诉我。我很高兴您发布了配置,我将要求您查看下一步:)它看起来正确。尝试使用类似于指定ClaimTypes.Name的方法将其拉出怎么样