通过WIF进行身份验证后,User.Identity.Name为null

时间:2013-02-28 09:45:27

标签: asp.net-mvc-3 wif

我正在使用WIF登录我的应用程序。一切似乎都没问题(记录,重定向到网站等),但当我尝试使用User.Identity.Name在我的鳕鱼异常被抛出时 - User是空的。任何想法我做错了什么?我在VS 2012上工作。在web.config中生成的部分如下所示:

  <system.identityModel>
    <identityConfiguration>
      <audienceUris>
        <add value="http://xxx/" />
      </audienceUris>     
      <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <trustedIssuers>
          <add thumbprint="yyyy" name="https://zzz" />
        </trustedIssuers>
      </issuerNameRegistry>
    </identityConfiguration>
  </system.identityModel>

  <system.identityModel.services>
    <federationConfiguration>
      <cookieHandler requireSsl="false" />
      <wsFederation passiveRedirectEnabled="true" issuer="https://zzz/Secure/FederatedLogin.ashx" realm="http://xxx" requireHttps="false" />          
    </federationConfiguration>        
  </system.identityModel.services>

3 个答案:

答案 0 :(得分:2)

使用WIF时,您应该使用Thread.CurrentPrincipal.Identity.Name而不是User.Identity.Name。

在此处阅读更多内容:http://msdn.microsoft.com/en-us/magazine/ff872350.aspx以了解有关Windows Identity Foundation的更多信息

答案 1 :(得分:2)

检查STS是否包含用户的名称声明,否则User.Identity.Name将为null。

答案 2 :(得分:0)

相反,我使用了:

namespace System.Security.Claims
{
    public static class System_Security_Claims_Extensions
    {
        public static string getName(this ClaimsIdentity ci)
        {
            foreach (Claim c in ci.Claims)
            {
                if (c.Type == ClaimTypes.Name)
                {
                    return c.Value;
                }
            }
            return string.Empty;
        }
    }
}

并在此背景下使用
((ClaimsIdentity)Thread.CurrentPrincipal.Identity).getName()